Sql server 为UDT中的每一行插入一行
当前有此查询: ALTER过程[dbo].[spCreateTaskInstances] @TaskId INT, @CreatedByUserId INT, @DueDates dbo.DateList只读 像 开始 不计较 插入到dbo.taskinstance TaskId、CreatedById、DueDate、RowGuid、CreateDate中 值@TaskId、@CreatedByUserId、, 选择CASTd.item作为@DueDates中的日期, NEWID,GETUTCDATE 终止 显然,这是失败的,因为当我超过一次约会时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
我是被迫在这里使用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