コード
create TYPE [dbo].[IntListType] as Table
(
[Number] [int] null
)
create procedure TestProc
(
@l IntListType readonly
)
as
begin
select * from products where ProductId in (select Number from @l)
end
create Table Products
(
ProductId
ProductName
)
insert into Products Values(1, 'One'),
(2, 'One'),
(3, 'Two'),
(4, 'Two'),
(5, 'Three'),
(6, 'Three')
問題
注意: これは単なる例です。クエリをストアド プロシージャに入れるのは簡単に思えるかもしれませんが、これは私が何をしたいのかを理解するためのものです。リアルタイムでは、この例ほど簡単ではありません。
現在、productId でいくつかの製品を収集したいのですが、次のようにする必要があります。
declare @l IntListType
insert into @l values(1),(2)
exec TestProc @l
または @l IntListType を宣言 @l に挿入する Name = 'One' の製品から ProductId を選択する exec TestProc @l
宣言部分をスキップして、選択結果を IntListType として作成することは可能でしょうか。「With」でこれをやろうとしました
exec TestProc (;with A as( select ProductId from Products where Name = 'One') select * from a)
しかし、私はこれを機能させることができませんでした。
私がやろうとしていることは可能ですか、またはユーザー定義のテーブル型を使用する場合、それが機能する前に常に宣言して入力する必要がありますか?