代码
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 insert into @l select ProductId from Products where Name = 'One' exec TestProc @l
我想知道是否可以跳过声明部分并将选择结果创建为 IntListType。我试图用“With”来做到这一点
exec TestProc (;with A as( select ProductId from Products where Name = 'One') select * from a)
但我无法完成这项工作。
是否有可能我正在尝试做,或者,如果我使用用户定义的表类型,我是否总是需要在它起作用之前声明和填充它?