-1

次のようなテーブル値パラメーターを作成しました。

CREATE TYPE dbo.ss AS TABLE(ss1 NVARCHAR(5));

次に、ストアドプロシージャを次のように書きました。

ALTER PROCEDURE [dbo].[T_TransactionSummary] 
 @locations dbo.ss readonly
as
begin
...............
.............
AND (Location_tbl.Locid IN (@locations))

これを実行中にエラーが発生しました:

スカラー変数「@locations」を宣言する必要があります。

ストアド プロシージャの問題点

4

1 に答える 1

5

真剣に?ここでは、使用できないことを示しましIN (@TVP)たが、代わりに別の手法を使用する必要がありますWHERE EXISTS

WHERE EXISTS (SELECT 1 FROM @locations WHERE ss1 = Location_tbl.Locid)

次のように言うこともできます。

WHERE Location_tbl.Locid IN (SELECT ss1 FROM @locations)

または:

INNER JOIN @locations AS x
ON x.ss1 = Location_tbl.Locid

その理由は@locations、本質的に、変数やリテラル値ではなく、テーブルであるためです。とは言えませんWHERE EmployeeID IN (dbo.Employees)よね?あなたが言うWHERE EmployeeID IN (SELECT EmployeeID FROM dbo.Employees)

于 2013-10-21T18:06:00.540 に答える