代码之家  ›  专栏  ›  技术社区  ›  Joe Phillips

生成SQL字符串时出现问题

  •  1
  • Joe Phillips  · 技术社区  · 15 年前

    为什么这段代码对我不起作用?它给出了错误 Must declare the scalar variable "@y".

    DECLARE @y int
    DECLARE @dbname VARCHAR(50)
    
    SET @y = -1
    SET @dbname = 'SomeDb.dbo.'
    
    SET @sql = 'SELECT @y=1 from ' + @dbname + 'Respondent'
    
    exec(@sql)
    
    1 回复  |  直到 15 年前
        1
  •  8
  •   Joe Phillips    15 年前

    这个 exec 函数创建新的执行范围。您的@y变量不存在。

    使用 sp_executesql 相反。注意,您仍然需要做一些额外的工作来将变量传递到函数边界。

    DECLARE @IntVariable int;
    DECLARE @SQLString nvarchar(500);
    DECLARE @ParmDefinition nvarchar(500);
    DECLARE @max_title varchar(30);
    
    SET @IntVariable = 197;
    SET @SQLString = N'SELECT @max_titleOUT = max(Title) 
       FROM AdventureWorks.HumanResources.Employee
       WHERE ManagerID = @level';
    SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT';
    
    EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT;
    SELECT @max_title;