如何从变量运行生成的SQL?

时间:2011-10-24 08:27:44

标签: tsql sql-server-2008

我已经尝试运行我的SQL(在T-SQL中)(我只是生成了一个变量),但我无法运行它。 我想做的是: 1.从Program运行大SQL 2. Big SQL生成selct-SQL 3.运行生成的sql像正常选择和接收数据一样正常。 我认为可以用sp_executesql完成,但看起来我的情况不对。

我正在尝试的是这样的:

declare @sql varchar(max)

set @sql = 'select x, y from z'

exec @sql --this is the point where im stuck.

我知道这一定是一个非常基本的问题,但我找不到适合谷歌问题的东西。

感谢您的帮助!

更新 我通过使用sp_sqlexec解决了我的问题(不再支持它,但工作方式与我想要的一样)。

declare @sql varchar(max)

set @sql = 'select x, y from z'

exec sp_sqlexec @sql 

正确的解决方案是sp_executesql! (见sp_sqlexec vs. sp_executesql) 对于我的问题,如果我“重建”我可以使用它的所有东西,那将是非常耗时的。

感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

您需要括号exec (@sql)

SQL Server将在@sql变量中查找名称的存储过程,但不要抱怨Could not find stored procedure 'select x, y from z'.

如果您使用的是动态SQL,请参阅The Curse and Blessings of Dynamic SQL以获取有关该主题的优秀文章。

答案 1 :(得分:5)

您也可以使用sp_executesql,但请注意它需要NVARCHAR(Unicode)

此外,如果您要构建动态过滤器,则可以按照以下

传递参数
declare @SQL nvarchar(max)
set @SQL = N'select x, y from z where x = @someFilter'
exec sp_executesql @SQL, N'@someFilter bigint', @someFilter = 6034280