【发布时间】:2018-12-24 01:10:59
【问题描述】:
使用 SQL Server 2016,我在循环中有一个非常简单的 IF NOT Exists ..... INSERT statement。正如预期的那样,这很好用。有没有办法确定哪些记录存在因此没有插入,哪些记录不存在因此在不使用第二个查询的情况下插入?
我可以通过执行 SELECT 轻松实现这一点,然后如果没有找到我插入,但是这是我循环中的两个查询。如果可能,我想尝试在一个查询中实现这一目标?
这样做的目的是向用户展示:
- Chris 现已注册英语
- Chris 现在就读数学
- Chris 已经就读于科学专业
所以 1 和 2 不存在因此插入。 3 确实存在因此没有插入
jon 的这个循环的例子:
for i = 0 to numOfCourses
sql = IF NOT EXISTS (SELECT fieldName from tableName
WHERE courseID = 1 AND directoryID = 2)
BEGIN
INSERT INTO tableName(courseID, directoryID)
VALUES (1, 2)
END
next
【问题讨论】:
-
请发布您已经构建的代码。请提供样本数据和期望的结果。我用这个工具生成ASCII tables。
-
@JonJaussi 我已经发布了我想要的结果。我拥有的代码只是一个如果不存在则在循环中插入查询。我现在已经包含了一个这样的例子
-
也许这有帮助:stackoverflow.com/questions/7917695/…,使用
OUTPUT子句。 -
我看不出您想要的输出与您提供的查询有什么关系。如何区分“已注册”和“已注册”?
-
扩展 hlg 的建议:基于集合的解决方案将使用 数字表 来提供值,因此只需要一个
insert。output子句可用于捕获插入了哪些行。结果可以与 numbers 表连接以识别未插入的行,即已经存在的行。旁白:奇怪的是,您没有在循环中使用i,您只是不断尝试一遍又一遍地处理同一行。
标签: sql sql-server tsql sql-server-2016