私はSQL Server 2012を使用しています。ストアドプロシージャを起動しようとするとエラーが発生するのはなぜですか?
Visual Studioからストアドプロシージャに整数の配列を渡す必要があります。私はwhere
節に渡された配列を使用する必要があります。この目的のために
私はtable valued parameter
を作成しました:
CREATE TYPE IdArray AS TABLE
(
Id int
);
そして、ここに私のストアドプロシージャ:
ALTER PROCEDURE [dbo].[SP_TEST_TLP]
@List dbo.IdArray READONLY
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM Clients
WHERE Clients.Id IN ('@List')
END
しかし、私は、ストアドプロシージャを発射しようと実行手順ウィンドウ内の値(いくつかの整数)を通過このエラーが表示されます。
Must pass parameter number 2 and subsequent parameters as '@name = value'. After the form '@name = value' has been used, all subsequent parameters must be passed in the form '@name = value'.
UPDATE:私はこのエラーを取得する理由
DECLARE @return_value int
EXEC @return_value = [dbo].[SP_TEST_TLP]
@List = 1,6
SELECT 'Return Value' = @return_value
任意のアイデア:ここで私は、ストアドプロシージャを呼び出す方法
?私は間違って何をしていますか?
あなたが間違っていることを指摘したい場合は、procを実行するために使用しているコードを投稿してください。また、ストアド・プロシージャ名の接頭辞として 'sp_'を使用しないでください。これは、SQL Serverシステムストアドプロシージャを示します。 TVPを囲んではいけません。その代わりに、 'SELECT id FROM @ List'のようなサブクエリーを指定してください。 –
'ここで、Clients.Id IN( '@List')'はあなたが望むことをしません。あなたはすでに正しい構文が与えられていますhttp://stackoverflow.com/questions/40206849/why-i-get-error-when-i-try-to-create-stored-procedure –
プロシージャを実行するコードを入手できますかウィンドウが生成されますか?プロシージャウィンドウの実行には、@name = value構文を使用してSPを呼び出します。カンマ区切り(1,2,3)で数字を書いているのであれば、おそらく '@List = 1,2,3 'と解釈され、それはあなたが望むものではありません。 – infiniteRefactor