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

时间:2012-06-15 14:33:04

标签: 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

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

所以我能用任何方式使用当前环境中变量的值来执行它。

1 个答案:

答案 0 :(得分:3)

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