0

コード

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)

しかし、私はこれを機能させることができませんでした。

私がやろうとしていることは可能ですか、またはユーザー定義のテーブル型を使用する場合、それが機能する前に常に宣言して入力する必要がありますか?

4

1 に答える 1

1

残念ながら申し訳ありませんが、現在のところSQL Serverでは、単純な計算をパラメーターとしてプロシージャに渡すことさえできません。したがって、クエリを渡すこともできません。

INちなみに、サブクエリでは使用しないでください。パフォーマンスの問題が発生する場合があります。EXISTS代わりに、またはストレートを使用してくださいJOIN

于 2013-02-01T15:05:09.213 に答える