sp_executesql不执行动态sql
我想从动态sql中获取两个变量的值sp_executesql不执行动态sql,sql,sql-server,Sql,Sql Server,我想从动态sql中获取两个变量的值 declare @sImport_Table1 table ( Id int identity(1,1) , Zone nvarchar(50), Sub_Code nvarchar(50), Geography nvarchar(50), DayOfWeek nvarchar(50) ) INSERT INTO @sImport_Table1 SELECT 'A','Z','Geo','SUN' declare @
declare @sImport_Table1 table
(
Id int identity(1,1) ,
Zone nvarchar(50),
Sub_Code nvarchar(50),
Geography nvarchar(50),
DayOfWeek nvarchar(50)
)
INSERT INTO @sImport_Table1 SELECT 'A','Z','Geo','SUN'
declare @sZone nvarchar(50)
declare @sSubCode nvarchar(50)
declare @c_Geography nvarchar(50)='Geo'
declare @c_DayOfWeek nvarchar(50)='SUN'
declare @sImport_Table nvarchar(500)='@sImport_Table1'
--SELECT * FROM @sImport_Table1
declare @sQuery nvarchar(4000)
SET @sQuery='SELECT @sZone = Zone, '+
'@sSubCode = Sub_Code
FROM '+ @sImport_Table +
' WHERE Geography ='''+ @c_Geography + '''
AND [DayOfWeek] = '''+ @c_DayOfWeek +''''
PRINT @sQuery
sp_executesql @sQuery)
PRINT @sZone
PRINT @sSubCode
替换
sp_executesql@sQuery)
与
执行sp_executesql@sQuery
在动态查询中,还需要在动态字符串中声明变量。
否则它将抛出错误 您需要在动态sql中声明此表变量,因为动态sql有自己的作用域,在动态sql之外声明的变量在动态sql中不可见 并在尝试从动态sql查询检索值时使用OUTPUT子句。像这样的
declare @sZone nvarchar(50)
declare @sSubCode nvarchar(50)
declare @c_Geography nvarchar(50)='Geo'
declare @c_DayOfWeek nvarchar(50)='SUN'
declare @sImport_Table nvarchar(500)='@sImport_Table1'
--SELECT * FROM @sImport_Table1
declare @sQuery nvarchar(MAX); --<-- to be on safe side
SET @sQuery = N' declare @sImport_Table1 table
(
Id int identity(1,1) ,
Zone nvarchar(50),
Sub_Code nvarchar(50),
Geography nvarchar(50),
DayOfWeek nvarchar(50)
)
INSERT INTO @sImport_Table1 SELECT ''A'',''Z'',''Geo'',''SUN''
SELECT @sZone = Zone, @sSubCode = Sub_Code ' +
N' FROM @sImport_Table1 ' +
N' WHERE Geography = @c_Geography ' +
N' AND [DayOfWeek] = @c_DayOfWeek '
PRINT @sQuery
EXECUTE sp_executesql @sQuery
,N'@c_Geography nvarchar(50),@c_DayOfWeek nvarchar(50),
@sZone nvarchar(50) OUTPUT, @sSubCode nvarchar(50) OUTPUT'
,@c_Geography , @c_DayOfWeek, @sZone OUTPUT, @sSubCode OUTPUT
SELECT @sSubCode, @sZone
declare@sZone-nvarchar(50)
声明@sSubCode nvarchar(50)
声明@c_Geography nvarchar(50)='Geo'
声明@c_DayOfWeek nvarchar(50)='SUN'
声明@sImport_表nvarchar(500)='@sImport_表1'
--从@sImport_表1中选择*
声明@sQuery nvarchar(最大值)--你真的想用英语解释一下你想做什么,问题和你的问题是什么@marc_很抱歉,我会处理的。@rahularyansharma当一个解决方案解决了你的问题,或者至少回答了没有帮助的问题时,你应该接受答案,我刚才看到了你之前提出的问题,你似乎有点不愿意接受答案,这个社区不是为了帮助一个人,而是为了帮助任何参与其中的人。您不接受答案可能会提示其他用户再次提出类似问题。