您必须声明标量变量@xml_var

时间:2014-04-02 07:27:16

标签: sql sql-server sql-server-2012

我正在使用SQL Server 2012 Express,我正在查询窗口中测试此代码:

DECLARE @xml_var XML
SET @xml_var = 
(
    SELECT ID_CODE AS '@ProductionId',
        CODE AS '@ItemId',
        CODE_LEVEL AS '@ItemPackagingLevelId',
        COMMISIONING_FLAG AS '@ItemFlag',
        TIMESPAN AS '@TimeStamp',
        USERNAME AS '@Username',
        SOURCE AS '@Source'
        FROM TRZIC.dbo.CODES_TEMP
    FOR XML PATH('Item'),
    ROOT('Commissioning')
)
GO

-- Call remote procedure passing it the xml
EXEC [UIC160\SQLEXPRESS].TRZIC.dbo.AddCommissioning @xml_var;
GO

但是,EXEC [UIC160\SQLEXPRESS].TRZIC.dbo.AddCommissioning @xml_var;,我收到此错误:

You must declare scalar variable @xml_var.

这是我第一次这样做,我不知道如何解决这个问题。

我该如何解决?

2 个答案:

答案 0 :(得分:2)

问题是第一个go

DECLARE @xml_var XML
SET @xml_var = 
(
    SELECT ID_CODE AS '@ProductionId',
        CODE AS '@ItemId',
        CODE_LEVEL AS '@ItemPackagingLevelId',
        COMMISIONING_FLAG AS '@ItemFlag',
        TIMESPAN AS '@TimeStamp',
        USERNAME AS '@Username',
        SOURCE AS '@Source'
        FROM TRZIC.dbo.CODES_TEMP
    FOR XML PATH('Item'),
    ROOT('Commissioning')
)
GO  <--- THIS ONE HERE


-- Call remote procedure passing it the xml
EXEC [UIC160\SQLEXPRESS].TRZIC.dbo.AddCommissioning @xml_var;
GO

go语句创建单独的批处理,并在批处理中定义变量。而且,这在文档(here)中已得到很好的描述。

删除该行,它应该工作。我还建议您在语句结束时加上分号。它有助于使代码更清晰,查看语句的开始和结束位置(SQL Server可能有一天需要它们)。

答案 1 :(得分:1)

变量范围在GO语句之后结束。你应该在EXEC远程proc调用之后写GO。