2013-04-03 50 views
0

我正在使用以下过程尝试将xml通过文件路径插入到xml列中。我得到一个错误必须为ForeignId声明标量变量。有没有更好的方式去做我想做的事情,还是我走在正确的道路上?将Xml插入Sql Server的过程 - 必须声明标量变量

下面是该过程

ALTER PROC [dbo].[InsertXml] @path nvarchar(100) 
        ,@ForeignId uniqueidentifier 
AS 

BEGIN 

SET NOCOUNT ON 

DECLARE @SQL nvarchar(4000) = 
'INSERT INTO XmlTable(XmlId 
      , ForeignId 
      , TestXml) 
SELECT NEWID() 
    , @ForeignId 
    ,* FROM OPENROWSET(
    BULK ''' + @path + ''', 
    SINGLE_BLOB) AS x;' 
EXECUTE(@SQL); 

RETURN @@ERROR; 

END 
+1

已经有[很多问题](http://stackoverflow.com/search?q=sql+must+declare+scalar+variable)对这个 – Pondlife 2013-04-03 22:12:37

回答

2

当你执行使用EXECUTE(SQL)它的@ForeignId价值得不到解决这个问题是使用sp_excuteSQL

一种方式的SQL语句,并做到这一点,而不是EXECUTE(@SQL);

DECLARE @ParmDefinition nvarchar(500); 
SET @ParmDefinition = N'@ForeignId uniqueidentifier'; 
EXECUTE sp_executesql @SQL, @ParmDefinition, @ForeignId ; 

你也可以直接连接@ForeignId到你的sql字符串b ut我不记得使用唯一标识符时是否有问题