使用 MERGE 在单个语句中对表执行 INSERT 和 UPDATE 操作
发布时间:2020-12-11 23:13:17 所属栏目:MySql教程 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 USE AdventureWorks2012;GOCREATE PROCEDURE dbo.InsertUnitMeasure @UnitMeasureCode nchar(3),@Name nvarchar(25)AS BEGIN SET NOCOUNT ON;-- Updat
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 USE AdventureWorks2012; GO CREATE PROCEDURE dbo.InsertUnitMeasure @UnitMeasureCode nchar(3),@Name nvarchar(25) AS BEGIN SET NOCOUNT ON; -- Update the row if it exists. UPDATE Production.UnitMeasure SET Name = @Name WHERE UnitMeasureCode = @UnitMeasureCode -- Insert the row if the UPDATE statement failed. IF (@@ROWCOUNT = 0 ) BEGIN INSERT INTO Production.UnitMeasure (UnitMeasureCode,Name) VALUES (@UnitMeasureCode,@Name) END END; GO -- Test the procedure and return the results. EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC',@Name = 'Test Value'; SELECT UnitMeasureCode,Name FROM Production.UnitMeasure WHERE UnitMeasureCode = 'ABC'; GO -- Rewrite the procedure to perform the same operations using the MERGE statement. -- Create a temporary table to hold the updated or inserted values from the OUTPUT clause. CREATE TABLE #MyTempTable (ExistingCode nchar(3),ExistingName nvarchar(50),ExistingDate datetime,ActionTaken nvarchar(10),NewCode nchar(3),NewName nvarchar(50),NewDate datetime ); GO ALTER PROCEDURE dbo.InsertUnitMeasure @UnitMeasureCode nchar(3),@Name nvarchar(25) AS BEGIN SET NOCOUNT ON; MERGE Production.UnitMeasure AS target USING (SELECT @UnitMeasureCode,@Name) AS source (UnitMeasureCode,Name) ON (target.UnitMeasureCode = source.UnitMeasureCode) WHEN MATCHED THEN UPDATE SET Name = source.Name WHEN NOT MATCHED THEN INSERT (UnitMeasureCode,Name) VALUES (source.UnitMeasureCode,source.Name) OUTPUT deleted.*,$action,inserted.* INTO #MyTempTable; END; GO -- Test the procedure and return the results. EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC',@Name = 'New Test Value'; EXEC InsertUnitMeasure @UnitMeasureCode = 'XYZ',@Name = 'Test Value'; EXEC InsertUnitMeasure @UnitMeasureCode = 'ABC',@Name = 'Another Test Value'; SELECT * FROM #MyTempTable; -- Cleanup DELETE FROM Production.UnitMeasure WHERE UnitMeasureCode IN ('ABC','XYZ'); DROP TABLE #MyTempTable; GO 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 用于检查房间的mysql是否存在具有持续时间的特定日期
- Mysql学习MySQL5.7.14下载安装图文教程及MySQL数据库语句入
- Mysql应用mysql存储过程简单实例
- Mysql学习mysql server is running with the --skip-grant-
- MYSQL数据库MySQL中无GROUP BY情况下直接使用HAVING语句的问
- mysql – QueryException SQLSTATE [HY000] [1045]拒绝访
- MYSQL教程MySql 5.6.36 64位绿色版安装图文教程
- Mysql入门MySQL 绿色版安装方法图文教程
- Mysql入门mysql常见错误集锦
- Mysql学习Ubuntu与windows双系统下共用MySQL数据库的方法