我有一个查询,其中select
部分真的很长。我想将它分成几部分,尤其是因为其中一些部分在其中两次甚至更多次出现。
我想要的是以下内容:
Declare @SQLPart as varchar(1000)
Set @SQLPart = 'Field1,
case ... as Field2,'
Select ..., @SQLPart, ... From .....
不幸的是,这会导致错误消息。我也尝试了类似
EXEC(@SQLPart)
的方法,但是当然这也没有用。我该如何解决? 最佳答案
是的,动态SQL和sp_executesql
:
CREATE TABLE ##Temp (Field1 int, Field2 int)
Declare @SQLPart nvarchar(1000)
Set @SQLPart = N'Field1, Field2 '
DECLARE @SQL nvarchar(1000) = N'SELECT ' + @SQLPart + 'FROM ##Temp'
PRINT @SQL
EXEC sp_executesql @SQL
DROP TABLE ##Temp
您的SQL代码必须为
nvarchar
类型。当您有许多类似的查询时,
sp_executesql
比EXECUTE
函数要好,sp_executesql
会缓存执行计划,并且性能会更好。