1

私はこのSQLステートメントを持っていますが、スカラー変数 "@InputPath"を宣言する必要がありますというエラーがあります

IF OBJECT_ID('DBO.SP_INSERT_REQUESTS') IS NULL BEGIN
    EXEC('CREATE PROCEDURE DBO.SP_INSERT_REQUESTS AS RETURN')
    GRANT EXECUTE ON DBO.SP_INSERT_REQUESTS TO PUBLIC
END
GO
ALTER PROCEDURE DBO.SP_INSERT_REQUESTS    
    @Name NVARCHAR(512), 
    @Code NVARCHAR(50),
    @InputPath NVARCHAR(2000),
    @OutputPath NVARCHAR(2000)
AS
GO

SET QUOTED_IDENTIFIER OFF

--DECLARE @InputPath varchar(2000) = "c:\MyDoc1.xsd"

DECLARE @InputValue XML

--DECLARE @OutputPath varchar(2000) = "c:\MyDoc2.xsd"

DECLARE @OutputValue XML

DECLARE @QUERY NVARCHAR(4000) SET @QUERY  = "
    SELECT @InputValue = InputExample.BulkColumn
    FROM OPENROWSET (BULK '"+@InputPath+"', SINGLE_BLOB) AS InputExample;   

    SELECT @OutputValue = InputExample.BulkColumn
    FROM OPENROWSET (BULK '"+@OutputPath+"', SINGLE_BLOB) AS InputExample;
"   

EXEC SP_EXECUTESQL @QUERY, N'@InputValue XML out, @OutputValue XML out', @InputValue out, @OutputValue out

INSERT INTO MyTable(Name, Code, Input, Output)
VALUES('value1', 'value2' , @InputValue, @OutputValue)

パラメータを宣言したので、エラーが発生する理由がわかりません。

4

2 に答える 2

3

「AS」と「SET QUOTED_IDENTIFIER OFF」の間にある GO を削除します。問題は、別のバッチで変数を宣言することです。

于 2013-02-19T15:16:01.837 に答える
2

動的 SQL は別のセッションで実行されるため、動的クエリの外で定義された変数は、動的クエリDEMO-HEREでは使用できません。

繰り返しになりますが、動的クエリ内でそれらを宣言すると、クエリの外では使用できなくなります。デモ - こちら

パラメータをopenrowsetに渡すことができないため、動的SQLを使用する理由がわかります。この問題を克服するために、このようなことを行うことができると思います。デモ

于 2013-02-19T15:21:18.737 に答える