代码之家  ›  专栏  ›  技术社区  ›  Tim Goodman

为什么exec参数中的串接有时会导致t-sql中的语法错误?

  •  10
  • Tim Goodman  · 技术社区  · 14 年前

    在MS SQL Server Management Studio 2005中,运行以下代码

    EXEC('SELECT * FROM employees WHERE employeeID = ' + CAST(3 AS VARCHAR))
    

    出现此错误: Incorrect syntax near 'CAST'

    但是,如果我这样做,它会起作用:

    DECLARE @temp VARCHAR(4000)
    SET @temp = 'SELECT * FROM employees WHERE employeeID = ' + CAST(3 AS VARCHAR)
    EXEC(@temp)
    

    我在这里找到了一个解释: T-SQL: Cannot pass concatenated string as argument to stored procedure

    根据公认的答案, EXEC 可以将局部变量或值作为其参数,但不能将其作为表达式。

    但是,如果是这样,为什么这样做:

    DECLARE @temp VARCHAR(4000)
    SET @temp = CAST(3 AS VARCHAR)
    EXEC('SELECT * FROM employees WHERE employeeID = ' + @temp)
    

    'SELECT * FROM employees WHERE employeeID = ' + @temp 当然,在我看来这是一个表达式,但代码执行时没有错误。

    1 回复  |  直到 14 年前
        1
  •  9
  •   LukeH    14 年前

    The documentation 说明 EXEC 可以采用字符串变量、常量t-sql字符串或两者的组合/连接。

    您的“why does this work”示例使用常量t-sql字符串和字符串变量的连接,因此是完全合法的。