如果存在,则使用UPDATE生成脚本INSERT(MSSQL)

时间:2016-03-02 11:13:39

标签: sql-server auto-generate

我想创建" 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个小时。

1 个答案:

答案 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,...
    );;