我已经尝试运行我的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) 对于我的问题,如果我“重建”我可以使用它的所有东西,那将是非常耗时的。
感谢您的帮助!
答案 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