sql-server - INSERT 和 UPDATE 如何根据 IF 条件工作?
问题描述
很想知道 SQL Server 中的一个简单 SQL 概念。我有两个表,基于某些 IF 条件,我想更新和插入来自不同表的数据。我在存储过程中使用下面的查询。
IF( SELECT COUNT(colname) FROM [dbo].[Table_BKP] WHERE colname LIKE ('%Dear(DEC''D)444-0292/555-4528C%'))> 0
BEGIN
;WITH Dear AS
(
SELECT ID,colname,SUBSTRING(colname,PATINDEX('%(DEC''D)%',colname),LEN(colname)-1) AS colname_4SUPPL,LEFT(colname,PATINDEX('%(DEC''D)%',colname)-1) AS colname_4MAIN
FROM [dbo].[Table_BKP] WHERE RTRIM(LTRIM(colname)) LIKE ('Dear(DEC''D)444-0292/555-4528C')
) SELECT * INTO Dear_ FROM Dear
UPDATE A SET A.colname = B.colname_4MAIN FROM Table AS A INNER JOIN
Dear_ AS B ON A.ID = B.ID
INSERT INTO Table_SUPPL(ID,colnameMSC,[SOURCE],[TARGET])
SELECT ID,replace(colname_4SUPPL,'(DEC''D)',''),'colname','colnameMSC'
FROM Dear_
END
更新语句工作正常,数据正在更新到所需的表中。但是,数据没有插入到所需的表中。
但是,当我改变如下顺序时,它工作得很好。
IF( SELECT COUNT(colname) FROM [dbo].[Table_BKP] WHERE colname LIKE ('%Dear(DEC''D)444-0292/555-4528C%'))> 0
BEGIN
;WITH Dear AS
(
SELECT ID,colname,SUBSTRING(colname,PATINDEX('%(DEC''D)%',colname),LEN(colname)-1) AS colname_4SUPPL,LEFT(colname,PATINDEX('%(DEC''D)%',colname)-1) AS colname_4MAIN
FROM [dbo].[Table_BKP] WHERE RTRIM(LTRIM(colname)) LIKE ('Dear(DEC''D)444-0292/555-4528C')
) SELECT * INTO Dear_ FROM Dear
INSERT INTO Table_SUPPL(ID,colnameMSC,[SOURCE],[TARGET]) SELECT
ID,replace(colname_4SUPPL,'(DEC''D)',''),'colname','colnameMSC' FROM
Dear_
UPDATE A SET A.colname = B.colname_4MAIN FROM Table AS A INNER JOIN
Dear_ AS B ON A.ID = B.ID
END
为什么,formar 查询没有按预期工作?并且,后一个[只是在更改序列之后(第一次插入然后更新)];它工作得很好...... SQL Server 如何管理这些序列?谁能澄清这个简单的疑问?谢谢。
解决方案
推荐阅读
- html - 即使使用相同的 css,保证金也会更大
- azure-data-factory-2 - 我们可以在自定义任务中设置 ADF 参数值或链接的服务连接字符串吗
- python - 用folium显示TomTom地图
- algorithm - 如何降低移动点凸包的复杂度?
- c# - 如何在mvc中设置gridview
- javascript - 使用节点在服务器上进行图像优化
- java - 无法获取令牌(OAUTH2、Spring、Kotlin)
- c# - AI 第三人称控制器敌人腿不动,但角色和航路点与敌人一起移动。Unity3d
- r - R闪亮for循环中的进度条
- angular - 如何以编程方式(使用 Javascript)使用新的 Chrome 版本(从 v69 开始)设置窄窗口大小?