【问题标题】:Using variable value in string when executing EXEC in SQL在 SQL 中执行 EXEC 时使用字符串中的变量值
【发布时间】:2012-06-15 14:33:04
【问题描述】:

我想在不需要创建查询本身的 exec 中使用变量值。 我将在我的数据库的一个字段中存储一个查询,我只想使用该存储过程中的参数来执行它。对于下面的示例,我声明了两个变量@ValueVariable 是存储过程的参数,而我声明的@QueryString 是我将从数据库中读取的变量,我想使用@ValueVariable 的值来执行它。

DECLARE @ValueVariable  int=0
        @QueryString    VARCHAR(MAX)=
                        'SELECT UserName FROM TableUser WHERE UserId=@ValueVariable'

EXEC(@QueryString)

当我尝试执行时,在“SELECT UserName FROM TableUser WHERE UserId=@ValueVariable”附近出现错误语法错误

我知道我可以做到这一点

@QueryString    VARCHAR(MAX)=
                            'SELECT UserName FROM TableUser WHERE UserId='+@ValueVariable

但我想如上所述使用它。不在我的过程中进行查询,而是使用从 DB 检索到的字符串中的变量值。

那么有什么方法可以让我在当前环境中使用变量中的值来执行它。

【问题讨论】:

  • 如果你想要参数化动态sql,使用sp_executesql
  • @Dems - 您应该将其发布为答案

标签: sql exec


【解决方案1】:

您可以使用sp_executesql

DECLARE
  @IntVariable    int,
  @SQLString      nvarchar(500),
  @ParmDefinition nvarchar(500)
SELECT
  @IntVariable    = 0,
  @SQLString      = N'SELECT UserName FROM TableUser WHERE UserId=@ValueVariable',
  @ParmDefinition = N'@ValueVariable INT'

SP_EXECUTESQL
  @SQLString,
  @ParmDefinition,
  @ValueVariable = @IntVariable;

本质上,它创建了一个一次性存储过程。 @paramDefinition 变量是您通常在存储过程中看到的参数签名,sql server 缓存执行计划等。

【讨论】:

    猜你喜欢
    • 2013-05-08
    • 2020-11-07
    • 2021-10-11
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多