我对T-SQL很陌生,目前在我的存储过程中遇到插入语句:我在存储过程中使用一个INT类型的id列表作为参数。
如果列表不为空,我想将ID存储到表中。
要传递id列表,我使用表类型:
CREATE TYPE tIdList AS TABLE
(
ID INT NULL
);
GO
也许您知道将一个id列表传递给存储过程的更好方法吗?
但是,我的程序如下:
-- parameter
@DeliveryModelIds tIdList READONLY
...
DECLARE @StoreId INT = 1;
-- Delivery
IF EXISTS (SELECT * FROM @DeliveryModelIds)
INSERT [MyDB].[Delivery] ([DeliveryModelId], [StoreId])
OUTPUT inserted.DeliveryId
SELECT ID FROM @DeliveryModelIds;
如果列表有值,我想将值存储到DB以及始终为1的StoreId。
如果我插入DeliveryIds 3,7,5表格中的结果交付应如下所示:
DeliveryId | StoreId | DeliveryModelId
1 ............... | 1 ........... | 3
2 ............... | 1 ........... | 7
3 ............... | 1 ........... | 5
您对如何解决此问题有所了解吗?
感谢!
答案 0 :(得分:2)
您可以为@StoreId
的{{1}}添加select
。
insert
此外,如果您只想插入目标表中当前不存在的...
IF EXISTS (SELECT * FROM @DeliveryModelIds)
INSERT [MyDB].[Delivery] ([DeliveryModelId], [StoreId])
OUTPUT inserted.DeliveryId
SELECT ID, @StoreId FROM @DeliveryModelIds;
,则可以在DeliveryModelId
子句中使用not exists()
,如下所示:
where
答案 1 :(得分:1)
您需要将INSERT
语句修改为:
INSERT [MyDB].[Delivery] ([DeliveryModelId], [StoreId])
OUTPUT inserted.DeliveryId
SELECT ID, 1 FROM @DeliveryModelIds;
因此,您还要选择文字1
以及ID
字段。