J09*_*J09 7 sql sql-server jobs
我有一个与SQL Server中的预定作业有关的问题.好吧,我猜它与预定的作业并不完全相关,但实际上与SQL查询有关.
无论如何,我的数据库中有2个表Table_1和Table_2.
我希望每隔5分钟运行一次预定作业,这将使Table_1中的所有缺失记录更新Table_2.
例如,如果Table_1有3条记录:
1 ABC
2 PQR
3 XYZ
Run Code Online (Sandbox Code Playgroud)
和Table_2只有2条记录:
2 PQR
3 XYZ
Run Code Online (Sandbox Code Playgroud)
这项工作的作用是将记录"1 ABC"添加到Table_2:
2 PQR
3 XYZ
1 ABC
Run Code Online (Sandbox Code Playgroud)
我在预定作业的步骤中写的查询如下:
在我的代码表中名称不同所以请原谅:
Table_1 = [sfs_test].dbo.[Table_1],
Table_2 = [sfs_test2].dbo.[Table_1]
INSERT INTO [sfs_test2].dbo.[Table_1] (UserID, UserName)
SELECT UserID, UserName
FROM [sfs_test].dbo.[Table_1]
WHERE UserID NOT IN (SELECT DISTINCT UserID
FROM [sfs_test2].dbo.[Table_1])
Run Code Online (Sandbox Code Playgroud)
现在,我面临的问题是,如果我更新/更改Table_1中的记录,就像我将记录的标识"1 ABC"更改为"4 ABC"一样
作业运行时,我在表2中获得以下记录
2 PQR
3 XYZ
1 ABC
4 ABC
Run Code Online (Sandbox Code Playgroud)
虽然我正在寻找以下输出:
2 PQR
3 XYZ
4 ABC
Run Code Online (Sandbox Code Playgroud)
我试图尽可能地解释我的情况.我是这个论坛的新手,所以,我很抱歉提出任何愚蠢的问题,或者不解释它.任何帮助表示赞赏
编辑:
谢谢所有的回复人!
我相信我没有提到Table_1的任何列都可以更新,同样应该反映在Table_2中.
@Jibin Balachandran的解决方案在仅更新UserID的情况下工作正常,但不能更改其他列的位置.
我想出了一个我自己的解决方案,并希望你的意见:
使用Right Join从表2中删除记录然后使用Left Join将Table_1中存在的记录插入Table_2是否有意义?
@Ranjana Gritmire我还没有尝试过你的解决方案.如果没有别的办法可以做到.谢谢 :)
小智 0
好吧,似乎新行正在表中插入,而不是更新旧记录,因为您编写的查询是 INSERT 语句。
INSERT INTO [sfs_test2].dbo.[Table_1] (UserID, UserName)
SELECT UserID, UserName
FROM [sfs_test].dbo.[Table_1]
WHERE UserID NOT IN (SELECT DISTINCT UserID
FROM [sfs_test2].dbo.[Table_1])
Run Code Online (Sandbox Code Playgroud)
我的假设:我假设这里的 UserID 是 ABC。如果是,那么理想情况下根本不应该插入记录,因为您使用的 where 条件表明 UserID 不应该存在于表中(您要插入的表中)。
我的解决方案:您需要编写一个 IF 语句来检查 ID 是否出现在上一个表中。
如果 ID 出现,那么您需要使用 UPDATE 来更新值。
如果 ID 没有出现,那么您需要使用 INSERT 来插入值。
我希望我已经消除了你的疑虑。
归档时间: |
|
查看次数: |
338 次 |
最近记录: |