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はそれに対してアドバイスしています。
この問題を克服する良い方法は何ですか?