[英]Merge Syntax SQL Server 2008
我基本上是在嘗試從 MYSQL 做的事情,它是 INSERT 和 ON DUPLICATE 等。
但是,我的“合並”語法出現錯誤。 這個存儲過程接受一個變量“@ID”,它是一個 guid,並在表中查看它是否已經存在——如果存在,則插入一個新條目,否則更新現有條目。 我無法弄清楚這里有什么問題!
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE usp_DigitalTool_InsertUpdate2
(@ID uniqueidentifier, @TOOL_ID uniqueidentifier, @INPUT_ID uniqueidentifier)
AS
MERGE
INTO DigitalTool as target
USING (SElECT @ID,@TOOL_ID,@INPUT_ID) as source(id, tool_id, input_id)
ON (target.ID = source.id)
when matched then
update
set TOOL_ID = source.tool_id,
INPUT_ID = source.input_id
when not matched then
insert ( ID, TOOL_ID, INPUT_ID)
values ( NEWID(), source.tool_id, source.input_id)
END
GO
幫助表示贊賞。 謝謝!
你需要類似的東西
MERGE
INTO DigitalTool as target
USING (SElECT @ID,@TOOL_ID,@INPUT_ID) as source(id, tool_id, input_id)
ON (target.id = source.id)
when matched then
update
set TOOL_ID = source.tool_id,
INPUT_ID = source.input_id
when not matched then
insert ( ID, TOOL_ID, INPUT_ID)
values ( NEWID(), source.tool_id, source.input_id)
更新。
您的程序中有幾個錯誤( BEGIN
遺漏,以及最后的分號)。 它應該看起來:
CREATE PROCEDURE usp_DigitalTool_InsertUpdate2
(@ID uniqueidentifier, @TOOL_ID uniqueidentifier, @INPUT_ID uniqueidentifier)
AS
BEGIN
MERGE
INTO DigitalTool as target
USING (SElECT @ID,@TOOL_ID,@INPUT_ID) as source(id, tool_id, input_id)
ON (target.ID = source.id)
when matched then
update
set TOOL_ID = source.tool_id,
INPUT_ID = source.input_id
when not matched then
insert ( ID, TOOL_ID, INPUT_ID)
values ( NEWID(), source.tool_id, source.input_id);
END;
你不需要USING
子句嗎?
請參閱合並。
使用 TSQL 可以使用 EXISTS 關鍵字來判斷是否找到一條記錄,如下所示。
IF EXISTS(
SELECT 1
FROM MY_TABLE
WHERE ITEM='somevalue' AND ENTERDATE='12/31/1999')
--Update Statement
UPDATE MY_TABLE
SET ITEM='anothervalue'
WHERE ITEM='somevalue' AND ENTERDATE='12/31/1999'
ELSE
--Insert Statement
INSERT INTO MY_TABLE
(ITEM, ENTERDATE)
VALUES
('somevalue', '12/31/1999')
merge DigitalTool
using (select ID from Table_name) as tbl
ON tbl.ID = @ID
when matched then
update
set TOOL_ID = '@TOOL_ID',
INPUT_ID = '@INPUT_ID'
when not matched then
insert ( ID, TOOL_ID, INPUT_ID)
values ( NEWID(), @TOOL_ID, @INPUT_ID )
你有一個END
很多, MERGE
需要以;
結束。
CREATE PROCEDURE usp_DigitalTool_InsertUpdate2
(@ID uniqueidentifier, @TOOL_ID uniqueidentifier, @INPUT_ID uniqueidentifier)
AS
MERGE
INTO DigitalTool as target
USING (SElECT @ID,@TOOL_ID,@INPUT_ID) as source(id, tool_id, input_id)
ON (target.ID = source.id)
when matched then
update
set TOOL_ID = source.tool_id,
INPUT_ID = source.input_id
when not matched then
insert ( ID, TOOL_ID, INPUT_ID)
values ( NEWID(), source.tool_id, source.input_id);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.