0

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

这是程序

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
4

1 回答 1

2

当您使用EXECUTE(SQL)它执行 SQL 语句时,它无法访问该@ForeignId

解决此问题的一种方法是使用sp_excuteSQL并执行此操作而不是EXECUTE(@SQL);

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

您也可以将 @ForeignId 连接到您的 sql 字符串,但我不记得在使用 uniqueidentifier 时是否存在问题

于 2013-04-03T22:02:23.653 回答