4

入力パラメーターが integer_list_tbltype のストアド プロシージャがあります。このようにprocを実行できます

DECLARE @mylist integer_list_tbltype
INSERT @mylist(n) VALUES(1),(2),(3),(4)
exec <Proc_Name> @mylist

これを SSRS (Sql Reporting Services 2008) で共有データベースとして追加しようとすると、エラーが発生します。

オペランド型の衝突: nvarchar は integer_list_tbltype と互換性がありません

これに対する回避策はありますか?

ヴェド

4

2 に答える 2

2

私は最近、同じ問題にイライラしています。これは、レポートが実行する必要があるクエリを実際に呼び出すときに、SSRS が常にすべてのパラメーターを nvarchar として送信するために発生すると思います。SQL Server が nvarchar を、使用しようとしているテーブル型として正しく解釈する方法はないため、そのエラーが発生します。

ストアド プロシージャを呼び出す前に、カスタム コード ブロックを使用してテーブル変数を設定する潜在的な解決策/回避策についてブログに書きました。

http://geekswithblogs.net/GruffCode/archive/2012/06/21/using-table-valued-parameters-with-sql-server-reporting-services.aspx

于 2012-06-22T02:25:43.700 に答える
1

残念ながら、SSRS の多値パラメーターは期待どおりに機能しません。テーブルなどのように動作しません。

代わりに、SSRS は SQL クエリのパラメーターをすべての値のコンマ区切りリストに置き換えます。したがって、例は次のように SQL Server に送信されます。

exec <Proc_Name> 1,2,3,4

SSRS で多値パラメーターを使用する方法 (たとえば、こちらを参照) は次のとおりです。

SELECT * FROM MyNumbers WHERE MyNumbers.Nmbr IN (@mylist)

次のように SQL Server に送信されます。

SELECT * FROM MyNumbers WHERE MyNumbers.Nmbr IN (1,2,3,4)

PS。投稿したエラー メッセージは、SSRS でパラメーターの型が「テキスト」に設定されていることを示している場合もあります。これは、「整数」を意味しているように見えます。

于 2012-06-16T13:25:31.177 に答える