是否可以在变量中设置select语句的一部分

时间:2017-01-12 08:52:39

标签: sql sql-server tsql

我有一个查询select - 部分真的很长。我想将它分成几部分,特别是因为有些部分存在两次甚至更多。

我喜欢的内容如下:

Declare @SQLPart as varchar(1000)
Set @SQLPart = 'Field1,
                case ... as Field2,'

Select ..., @SQLPart, ... From .....

不幸的是,这会导致错误消息。我尝试了类似EXEC(@SQLPart)的东西,但当然这也没有用。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:4)

是的,动态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缓存执行计划,并且性能更佳。

答案 1 :(得分:2)

您可以在此处使用动态sql,并使用EXECUTE关键字来执行此动态查询

Declare @SQLPart as varchar(1000)
Set @SQLPart = 'Field1,
                case ... as Field2,'

EXECUTE ('SELECT ....,'+@SQLPart+',... FROM ...')

答案 2 :(得分:2)

SQL Server不支持宏替换,因此您必须使用动态SQL。

Declare @SQL varchar(max) ='Select ... ' + @SQLPart + '... from ...'
Exec(@SQL)