2017-10-24 10 views
2

ユーザ定義テーブルタイプをストアプロシージャ(EFを使用してオリジナル)に渡そうとしています。しかし、sp_executesqlがparametrをストアドプロシージャに渡すように見えますが、空です。それをチェックアウト、こちらのタイプである:ここでMsSQLがsp_executesqlを使用してユーザ定義のテーブルタイプを渡していません

CREATE TYPE [dbo].[BigIntList] AS TABLE(
    [Item] [bigint] NULL 
) 

は、ストアドプロシージャです:

CREATE PROCEDURE [dbo].[MyProcedure] 
    @bookEntryIds [dbo].[BigIntList] READONLY 
AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT * FROM @bookEntryIds 
END 

そして、ここで私を気にするものである:

DECLARE @bookEntryIds [dbo].[BigIntList] 
INSERT INTO @bookEntryIds VALUES (50181) 
INSERT INTO @bookEntryIds VALUES (40182) 

-- 1. This returns 50181 and 40182 
EXEC [dbo].[MyProcedure] @bookEntryIds 

-- 2. This returns empty result with column "Item" 
EXEC sp_executesql N'[dbo].[MyProcedure]', N'@bookEntryIds [dbo].[BigIntList] READONLY', @bookEntryIds 

2番目のクエリは、エンティティによって使用されていますフレームワークなので、動作させる必要があります。あなたは何が間違っているのか教えてください。私はこれを行う方法をいくつかのガイドとチェックし、私はここで何も間違いを見る。

タイプを文字列(VARCHAR(100))に変更しようとしましたが、結果は同じでした。私はSQLサーバー2016で実行していますが、dev(ホスティング)マシンでも同じことが起こります.2014年版です。

ありがとうございました。

マーティン

EDIT - @sepupicによってソリューション:

あなたは私のようなPass table value type to SQL Server stored procedure via Entity Frameworkに触発された場合は、このパラメータを渡していることを確認してください、のように:

context.Database.ExecuteSqlCommand("[dbo].[MyProcedure] @bookEntryIds", parameter); 

答えて

1
(!)
-- 2. This returns empty result with column "Item" 
EXEC sp_executesql N'[dbo].[MyProcedure]', N'@bookEntryIds [dbo].[BigIntList] READONLY', @bookEntryIds 

結果が忘れたため、結果は空ですパラメータには、それは次のようになります。最大 `@のbookEntryIds`の良さについて

EXEC sp_executesql N'[dbo].[MyProcedure] @bookEntryIds = @bookEntryIds', N'@bookEntryIds [dbo].[BigIntList] READONLY', @bookEntryIds 
+0

、声明の完全な形式は、[DBO]' EXEC sp_executesqlをN'EXECだろう[MyProcedure] @bookEntryIds = @bookEntryIds。 '、N' @ bookEntryIds [dbo]。[BigIntList] READONLY '、@bookEntryIds = @ bookEntryIds'。これにより、ストアドプロシージャを動的なEXEC SQLステートメントと呼んでいることがわかります。直接RPC呼び出しは、間接的にパラメータを渡しますが、EFがそれを直接サポートしているかどうかはわかりません。 –

+0

ありがとうございます。今私は本当に馬鹿だと感じる。私はhttps://stackoverflow.com/questions/33772886/pass-table-value-type-to-sql-server-stored-procedure-via-entity-frameworkに触発されているため、おそらくそれを見逃してしまったでしょう。 。再度、感謝します。 –

関連する問題