Vac*_*ano 5 sql t-sql sql-server-2008
说我有一个名为表Employee(有ID,NAME,ADDRESS,和PHONE列).(不是我真正的问题,而是简化以使问题更容易.)
如果我把一个名为存储过程UpdateEmployee,我传递一个@Name,@Address,@Phone和@ID.
可以使用合并来轻松检查ID是否存在?如果它确实更新了名称,地址和电话?如果不插入它们?
我在网上看到了一些例子,但是它们很庞大而且毛茸茸.如果可能的话,我想要一个很好的简单例子.
(我们最近升级到SQL 2008,所以我是merge命令的新手.)
Bill Karwin的代码几乎是正确的.我做了必要的改变.使用变量值可以让您看到它的实际效果.表:
CREATE TABLE [dbo].[employee](
[ID] [int] NULL,
[Name] [char](20) NULL,
[Address] [char](20) NULL,
[Phone] [int] NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
码:
DECLARE @ID int, @NAME char(20), @ADDRESS char(20), @PHONE int
SET @ID=2
SET @NAME='Jenny'
SET @ADDRESS='11 My St'
SET @PHONE=228326
MERGE Employee AS target
USING (SELECT @ID, @NAME, @ADDRESS, @PHONE) AS source (ID, Name, Address, Phone)
ON (target.ID = source.ID)
WHEN MATCHED THEN
UPDATE SET NAME = source.Name,
ADDRESS = source.Address,
PHONE = source.Phone
WHEN NOT MATCHED THEN
INSERT (ID, NAME, ADDRESS, PHONE)
VALUES (source.ID, source.Name, source.Address, source.Phone);
Run Code Online (Sandbox Code Playgroud)
我没有对此进行测试,但根据文档,这可能会让您走上正轨:
MERGE myschema.Employee AS target
USING (SELECT @ID, @NAME, @ADDRESS, @PHONE) AS source (ID, Name, Address, Phone)
ON (target.ID = source.ID)
WHEN MATCHED THEN
UPDATE SET NAME = source.Name
ADDRESS = source.Address
PHONE = source.Phone
WHEN NOT MATCHED THEN
INSERT (ID, NAME, ADDRESS, PHONE)
VALUES (source.ID, source.Name, source.Address, source.Phone)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
192 次 |
| 最近记录: |