Sql server 为UDT中的每一行插入一行

Sql server 为UDT中的每一行插入一行,sql-server,Sql Server,当前有此查询: ALTER过程[dbo].[spCreateTaskInstances] @TaskId INT, @CreatedByUserId INT, @DueDates dbo.DateList只读 像 开始 不计较 插入到dbo.taskinstance TaskId、CreatedById、DueDate、RowGuid、CreateDate中 值@TaskId、@CreatedByUserId、, 选择CASTd.item作为@DueDates中的日期, NEWID,GETUTC

当前有此查询:

ALTER过程[dbo].[spCreateTaskInstances] @TaskId INT, @CreatedByUserId INT, @DueDates dbo.DateList只读 像 开始 不计较 插入到dbo.taskinstance TaskId、CreatedById、DueDate、RowGuid、CreateDate中 值@TaskId、@CreatedByUserId、, 选择CASTd.item作为@DueDates中的日期, NEWID,GETUTCDATE 终止 显然,这是失败的,因为当我超过一次约会时


我是被迫在这里使用for循环的吗?

只需使用表值参数,如表-正确的基于集合的方法,不需要混乱的while或for循环:

ALTER PROCEDURE [dbo].[spCreateTaskInstances]
    @TaskId INT,
    @CreatedByUserId INT,
    @DueDates dbo.DateList READONLY
AS 
BEGIN 
    SET NOCOUNT ON

    INSERT INTO dbo.taskinstance (TaskId, CreatedById, DueDate, RowGuid, CreatedDate) 
        SELECT
            @TaskId, @CreatedByUserId, CAST(d.item AS DATE), NEWID(), GETUTCDATE()
        FROM
            @DueDates d
END

只需使用表值参数,如基于适当表集的方法,无需任何混乱的while或for循环:

ALTER PROCEDURE [dbo].[spCreateTaskInstances]
    @TaskId INT,
    @CreatedByUserId INT,
    @DueDates dbo.DateList READONLY
AS 
BEGIN 
    SET NOCOUNT ON

    INSERT INTO dbo.taskinstance (TaskId, CreatedById, DueDate, RowGuid, CreatedDate) 
        SELECT
            @TaskId, @CreatedByUserId, CAST(d.item AS DATE), NEWID(), GETUTCDATE()
        FROM
            @DueDates d
END