【发布时间】:2016-11-07 11:37:34
【问题描述】:
我有以下查询 - 一个游标循环遍历表 ltr_program 拉动一列 (id) 将该值插入到新创建的表中。它还将一个 id 字段添加到新创建的表中。
我很难添加逻辑来说明仅在目标表中不存在该 id 时才添加该 id(该作业将定期运行,并且随着时间的推移将添加新的 id)。我希望代码更加动态,只添加新创建的数据。
DECLARE @next int, @program int
DECLARE insert_cursor CURSOR FOR
SELECT id
FROM ltr_program
OPEN insert_cursor
FETCH NEXT FROM insert_cursor INTO @program
WHILE @@FETCH_STATUS = 0
BEGIN
SET @next = (SELECT MAX(id) FROM LTR_Budget) + 1
INSERT INTO LTR_Budget (id, ProgramID)
SELECT @next, @program
FETCH NEXT FROM insert_cursor INTO @program
END
CLOSE insert_cursor
DEALLOCATE insert_cursor
谢谢,
【问题讨论】:
-
MySQL 还是 SQL Server?恐怕不能两者兼得。
-
对不起,SQL Server(当你点击快速添加时会发生这种情况)
-
不要为此使用光标。这应该是一个插入语句。当然,当使用“滚动自己的”递增值而不是使用标识时,您会遇到潜在的并发问题。
-
我将 id 字段更新为身份。
标签: sql-server insert cursor exists not-exists