2013-04-03 4 views
0

Я использую следующую процедуру, чтобы попытаться вставить xml через путь к файлу в столбец xml. Я получаю сообщение об ошибке, чтобы объявить скалярную переменную для ForeignId. Есть ли лучший способ сделать то, что я пытаюсь сделать, или я на правильном пути?Процедура вставки Xml Into Sql Server - обязательная декларация Scalar Variable

Вот процедура

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

ответ

2

Когда вы выполнении оператора SQL с помощью EXECUTE(SQL) он не имеет доступа к значению @ForeignId

Одним из способов решения этой проблемы является использование sp_excuteSQL и сделать это вместо того, чтобы из EXECUTE(@SQL);

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

Вы также можете просто сцепить @ForeignId к вашему SQL строки б ut Не могу вспомнить, есть ли проблемы с этим при использовании уникального идентификатора

Смежные вопросы