我正在使用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.
这是我第一次这样做,我不知道如何解决这个问题。
我该如何解决?
答案 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。