【发布时间】:2017-04-14 12:56:45
【问题描述】:
我对 T-SQL 还是很陌生,目前正在为我的存储过程中的插入语句苦苦挣扎:我在存储过程中使用 INT 类型的 id 列表作为参数。
如果列表不为空,我想将 ID 存储到 Delivery 表中。
为了传递 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;
如果列表有值,我想将值存储到数据库以及 StoreId 中,它始终为 1。
如果我插入 DeliveryIds 3,7,5 表 Delivery 中的结果应该如下所示:
DeliveryId |商店 ID | DeliveryModelId
1.............| 1…………| 3
2.............| 1…………| 7
3.............| 1…………| 5
你知道如何解决这个问题吗?
谢谢!
【问题讨论】:
-
错误消息应该已经为您提供了一个线索-您在
INSERT中的表名之后命名了两列,然后给它一个SELECT,它只选择一个值。不确定OUTPUT子句目前是否打算在这里执行。 (是的,您选择了向程序发送多个值的正确方法)
标签: sql-server tsql stored-procedures