假设我有一个数据库。让我们将此数据库称为 Utils。在Utils
我有 2 个功能。好的,可以说我目前在 db 工作MyDatabase
。我需要计算表格中的一些字段。这就是我目前的做法:我的 select 语句如下所示
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 语句两次,因为如果发生更改,那么我必须在两个容易出错的地方更改它,使我的脚本非常长且难以阅读以及其他问题.
我的解决方案
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 建议不要这样做。
有什么好的方法可以克服这个问题?