我想创建" UPDATE如果存在,则INSERT"具有以下模式的表中现有值的语句:
if exists (select 1 from TABLE_NAME where Ident_Column=Identifier )
update TABLE_NAME set
Column1=Value1,
Column2=Value2,
Column3=Value3,
...
where Ident_Column=Identifier
else
insert into TABLE_NAME ( Column1, Column2, Column3, ...)
select Value1, Value2, Value3, ...
go
我尝试使用MSSQL Mangement Studio(2014)脚本生成器,但是我没有按照需要获得输出。
编辑:所需的输出是SQL语句,@ Rusland K.& Nick.McDermaid。我想使用脚本生成器为表TABLE的每个(或选定)行生成此SQL代码。 标识符不是变量,而是一个值。 如果列Ident_Column中的值标识符存在,则相应地设置该行(值1-n)。如果在任何行中找不到该标识符,请相应地创建一个now行。 @bmsqldev:这是整个代码(只是替换了真正的列/表名和具体值)
其实我不明白是什么原因引起了误会。如果你能说,我很乐意学习。
EDIT2:我努力编写一个小脚本,根据这种模式转换MSSQL Mangement Studio的脚本输出,这花了我大约2个小时。
答案 0 :(得分:1)
MERGE TABLE_NAME AS TARGET
USING(
SELECT
*
FROM
DBO.TABLE_NAME
WHERE
IDENT_COLUMN=IDENTIFIER
) AS SOURCE
ON(
TARGET.COLUMN1 = SOURCE.COLUMN1
AND TARGET.COLUMN2 = SOURCE.COLUMN2
AND TARGET.COLUMN3 = SOURCE.COLUMN3
)
WHEN MATCHED THEN UPDATE
SET
TARGET.COLUMN1=SOURCE.VALUE1,
TARGET.COLUMN2=SOURCE.VALUE2,
TARGET.COLUMN3=SOURCE.VALUE3,
WHEN NOT MATCHED THEN INSERT
(
COLUMN1, COLUMN1, COLUMN1, ...)
VALUES(
(VALUE1, VALUE2, VALUE3, ...
),
SOURCE.VALUE1,
SOURCE.VALUE2,
SOURCE.VALUE3,...
);;