【问题标题】:SQL Server Dynamic SQL can't get the valueSQL Server 动态 SQL 无法获取值
【发布时间】:2013-10-14 19:59:28
【问题描述】:

当我写这样的动态 sql 时?

set @dynamicSQL='select '+@logName+'= name from '+@databaseName+'.sys.sysfiles where groupid=0'

它不能工作,但是当我这样写时:

select @logName=name from sys.sysfiles where groupid=0;         

它可以正常工作,像这样:

set @dynamicSQL='select name from '+@databaseName+'.sys.sysfiles where groupid=0'

它可以正常工作。但是为什么呢?如果有人告诉我,我会接受的。

【问题讨论】:

  • 你传递给@logName的值是什么
  • 当一个语句执行时,它在它自己的shell中执行,它与你的脚本运行所在的shell是分开的;这些 shell 之间不可能进行通信,除非它涉及存储在表中的数据(即,一个 shell 将数据写入表中,然后在另一个 shell 中检索):您的第一个查询试图从子 shell 中检索信息,但是这是不可能的,因为无法取回该子 shell 的输出。这有帮助吗?
  • 对于简单地从动态查询中检索变量,这个线程可能会有所帮助:stackoverflow.com/questions/3840730/…

标签: sql sql-server


【解决方案1】:

解决办法是这样的:

set @dynamicSQL=N'select @logName= name from '+@databaseName+'.sys.database_files where type_desc=''LOG'''

exec sp_executesql @dynamicSQL,N'@logName nvarchar(100) output',@logName output 

那么我们就可以从动态语句中得到name了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多