T-SQL检查列表是否有值,选择并插入表格

时间:2017-04-14 12:56:45

标签: sql-server tsql stored-procedures

我对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

您对如何解决此问题有所了解吗?

感谢!

2 个答案:

答案 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字段。