0

DBがあるとしましょう。このデータベースを Utils と呼びましょう。私にUtilsは2つの機能があります。さて、私は現在 db で作業しているとしましょうMyDatabase。テーブル内のいくつかのフィールドを計算する必要があります。これが私が現在行っている方法です。私の選択ステートメントは次のようになります

SELECT *, 
   column1= UTILS.dbo.Function1(ID)
   column2 =UTILS.dbo.Function1(Name
   column3 =UTILS.dbo.Function1(Address)
INTO ##temp_table1 
FROM MyDatabase.dbo.Customers


SELECT *, 
   column1= UTILS.dbo.Function2(ID)
   column2 =UTILS.dbo.Function2(Name
   column3 =UTILS.dbo.Function2(Address)
INTO ##temp_table2
FROM MyDatabase.dbo.Customers

これに関する問題は、計算する列が 3 つだけではないことです。私は約100を持っています。したがって、selectステートメントを2回繰り返したくないのは、変更が発生した場合、エラーが発生しやすい2つの場所で変更する必要があるため、スクリプトが非常に長くなり、読みにくくなり、その他の問題が発生するためです。 .

私の解決策

    USE Utils; GO;    
    DECLARE @strSQL VARCHAR(MAX)
    SET @strSQL = '    
        SELECT *, 
               column1= UTILS.dbo.temp_function(ID)
               column2 =UTILS.dbo.temp_function(Name
               column3 =UTILS.dbo.temp_function(Address) '

    exec sp_rename 'UTILS.dbo.Function1' ,'temp_function'
    exec (@strSQL + 'into temp_table1 FROM Customers')
    exec sp_rename 'temp_function' ,'UTILS.dbo.Function1'

    exec sp_rename 'UTILS.dbo.Function2' ,'temp_function'
    exec (@strSQL + 'into temp_table2 FROM Customers')
    exec sp_rename 'temp_function' ,'UTILS.dbo.Function2'

しかし、使用するデータベースを変更する必要があるため、このソリューションは好きではありませんsp_rename。それは私にも注意を促します。そしてMSDNはそれに対してアドバイスしています。

この問題を克服する良い方法は何ですか?

4

1 に答える 1

0

次のようにソリューションを変更することで、sp_renameの使用を簡単に回避できます。

USE Utils; GO;    
DECLARE @strBaseSQL VARCHAR(MAX)
       ,@strSQL VARCHAR(MAX)

SET @strBaseSQL = '    
    SELECT *, 
           column1= UTILS.dbo.temp_function(ID)
           column2 =UTILS.dbo.temp_function(Name
           column3 =UTILS.dbo.temp_function(Address) '

SELECT @strSQL = REPLACE(@strBaseSQL, 'UTILS.dbo.temp_function', 'UTILS.dbo.function1')
EXEC (@strSQL + 'into temp_table1 FROM Customers')

SELECT @strSQL = REPLACE(@strBaseSQL, 'UTILS.dbo.temp_function', 'UTILS.dbo.function2')
EXEC (@strSQL + 'into temp_table2 FROM Customers')
于 2013-03-16T13:47:59.323 に答える