sp_executesql不执行动态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 @

我想从动态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 @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当一个解决方案解决了你的问题,或者至少回答了没有帮助的问题时,你应该接受答案,我刚才看到了你之前提出的问题,你似乎有点不愿意接受答案,这个社区不是为了帮助一个人,而是为了帮助任何参与其中的人。您不接受答案可能会提示其他用户再次提出类似问题。