2016-09-01 6 views
0

"ListOfName"というテーブルタイプのパラメータを作成し、そのタイプのパラメータを自分のプロシージャに設定してみます。しかし被ったエラー:テーブルタイプパラメータを定義する

は "@Table_Name_List"

をスカラー変数を宣言する必要がありますが、私は定義チャンクの前に文を追加する場合、私は

CREATE TYPE ListOfName AS TABLE (Table_Name nvarchar(50)); 

CREATE PROCEDURE spTest 
    @Table_Name_List ListOfName READONLY 

AS 
    SELECT * from dbo.Table_Size_Daily 

    WHERE Table_NAME IN (@Table_Name_List) 
Go 

を宣言し、

DECLARE @Table_Name_List AS ListOfName; 

エラーは:

変数名 '@Table_Name_List'はすでに宣言されています。 変数名は、クエリバッチ内で一意であるか、または プロシージャに格納されている必要があります。

どうすれば修正できますか?ありがとうございます

+0

'@ Table_Name_List'はテーブル型で、' where'で渡すパラメータではありません。 – techspider

+0

研究[この記事](https://msdn.microsoft.com/en-us/library/bb675163(v=vs/) 110).aspx)テーブルタイプの使用方法について – techspider

+1

クイックフィックス: 'WHERE Table_name IN(SELECT Table_Name FROM @Table_Name_List) ' – techspider

答えて

1

私は、テーブルタイプが何であるかについて誤解があることがわかります。あなたのテーブルタイプには1つのカラムしかありませんが、それを単一カラムの引数として扱うことはできません。

個のカラム数に関係なく、テーブルタイプパラメータを他のテーブルと見なしてください。あなたの問題を解決するために

、私は以下のように変更するには、あなたのWHERE条件を好む:

WHERE Table_NAME IN (SELECT Table_Name FROM @Table_Name_List) 

をしかし、私は強くあなたがを進める前に、表のタイプにいくつかのチュートリアルを読むためにあなたをお勧めします任意の実装。例:MSDNのThis Table Valued Parameters articleには明確な洞察があります。

関連する問題