sql - 在 SQL 中执行 EXEC 时使用字符串中的变量值

标签 sql exec

我想在 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

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

那么有什么方法可以使用当前环境中变量的值来执行该操作。

最佳答案

您可以使用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 缓存执行计划等。

关于sql - 在 SQL 中执行 EXEC 时使用字符串中的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052749/

相关文章:

javascript - 当每行都有自己的动态值时,动态 php 行仅将第一行的值提供给 javascript 函数

mysql - 检查行是否被另一个表使用

mysql - 选择特定日期有空的老师

Python:迭代 shell 命令结果的好方法

shell - 在shell脚本中捕获exec返回代码

Java:Runtime.exec 获取 Linux 发行版名称

sql - 从 PL/SQL 插入到临时表 GTT 非常慢

php - 在php中上传和检索图像到数据库

c - 如何对位置未知的命令使用 execv?

Android Runtime.getRuntime().exec 和 rsync