我有一个查询,其中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_executesqlEXECUTE函数要好,sp_executesql会缓存执行计划,并且性能会更好。

07-26 09:29