久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

僅當(dāng)表中不存在記錄時(shí)才插入記錄

Insert record only if record does not already exist in table(僅當(dāng)表中不存在記錄時(shí)才插入記錄)
本文介紹了僅當(dāng)表中不存在記錄時(shí)才插入記錄的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我想知道是否有一種方法可以在表中不包含該記錄的情況下將記錄插入到表中?

I'm wondering if there is a way to insert a record into a table only if the table does not already contain that record?

是否有可以執(zhí)行此操作的查詢(xún),或者我是否需要一個(gè)存儲(chǔ)過(guò)程?

Is there a query that will do this, or will I need a stored procedure?

推薦答案

你不說(shuō)是什么版本的 SQL Server.如果 SQL Server 2008 你可以使用 MERGE

You don't say what version of SQL Server. If SQL Server 2008 you can use MERGE

注意:通常將 Merge 用于 Upsert,這是我最初認(rèn)為問(wèn)題所問(wèn)的問(wèn)題,但它在沒(méi)有 WHEN MATCHED 子句的情況下是有效的,只有一個(gè) WHEN NOT MATCHED 子句也適用于這種情況.示例用法.

NB: It is usual to use Merge for an Upsert which is what I originally thought the question was asking but it is valid without the WHEN MATCHED clause and just with a WHEN NOT MATCHED clause so does work for this case also. Example Usage.

CREATE TABLE #A(
 [id] [int] NOT NULL PRIMARY KEY CLUSTERED,
 [C] [varchar](200) NOT NULL)


    MERGE #A AS target
    USING (SELECT 3, 'C') AS source (id, C)
    ON (target.id = source.id)
    /*Uncomment for Upsert Semantics
       WHEN MATCHED THEN 
        UPDATE SET C = source.C */
    WHEN NOT MATCHED THEN    
        INSERT (id, C)
        VALUES (source.id, source.C);

就執(zhí)行成本而言,當(dāng)要完成插入時(shí),兩者看起來(lái)大致相等...

In terms of execution costs the two look roughly equal when an Insert is to be done...

首次運(yùn)行計(jì)劃圖像的鏈接

但是在第二次運(yùn)行時(shí)沒(méi)有插入操作時(shí),馬修的答案看起來(lái)成本更低.我不確定是否有辦法改善這一點(diǎn).

but on the second run when there is no insert to be done Matthew's answer looks lower cost. I'm not sure if there is a way of improving this.

鏈接以計(jì)劃第二次運(yùn)行的圖像

測(cè)試腳本

select * 
into #testtable
from master.dbo.spt_values

CREATE UNIQUE CLUSTERED INDEX [ix] ON #testtable([type] ASC,[number] ASC,[name] ASC)


declare @name nvarchar(35)= 'zzz'
declare @number int = 50
declare @type nchar(3) = 'A'
declare @low int
declare @high int
declare @status int = 0;



MERGE #testtable AS target
USING (SELECT @name, @number, @type, @low, @high, @status) AS source (name, number, [type], low, high, [status])
ON (target.[type] = source.[type] AND target.[number] = source.[number] and target.[name] = source.[name] )
WHEN NOT MATCHED THEN    
INSERT (name, number, [type], low, high, [status])
VALUES (source.name, source.number, source.[type], source.low, source.high, source.[status]);

set @name = 'yyy'

IF NOT EXISTS 
    (SELECT *
    FROM #testtable
    WHERE [type] = @type AND [number] = @number and name = @name)
    BEGIN
INSERT INTO #testtable
(name, number, [type], low, high, [status])
VALUES (@name, @number, @type, @low, @high, @status);
END

這篇關(guān)于僅當(dāng)表中不存在記錄時(shí)才插入記錄的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

SQL trigger on Truncate(截?cái)鄷r(shí)的 SQL 觸發(fā)器)
sql search query with multiple optional search parameters(具有多個(gè)可選搜索參數(shù)的 sql 搜索查詢(xún))
SQL Efficiency: WHERE IN Subquery vs. JOIN then GROUP(SQL 效率:WHERE IN 子查詢(xún) vs. JOIN 然后 GROUP)
Retrieving XML element name using t-SQL(使用 t-SQL 檢索 XML 元素名稱(chēng))
Insert double quotes into SQL output(在 SQL 輸出中插入雙引號(hào))
Delete rows from CTE in SQL SERVER(從 SQL SERVER 中的 CTE 中刪除行)
主站蜘蛛池模板: 国产精品久久久一区二区 | 亚洲小视频在线观看 | 欧美一区二区三区成人 | 日本不卡在线视频 | 久久精品欧美一区 | 伊人久久精品视频 | 91午夜精品亚洲一区二区三区 | 国产乱码一区二区 | 国产精品呻吟 | 国产网站免费 | 亚洲播放 | 免费毛片观看 | 久久99精品久久久久久琪琪 | 日韩视频一区 | 国产日韩欧美日韩大片 | 国产乱人伦 | 国产理论视频 | 成人免费视频一区二区 | 欧美一级免费 | 天堂色av | 午夜免费视频 | 91成人在线视频 | 成人羞羞国产免费动态 | 国产精品99久久久久久www | 国产黄av | 国产成人亚洲精品自产在线 | 欧美一级黄色大片 | 国产亚洲一区二区三区 | 免费不卡视频 | 成人三级小说 | 色吧综合 | 国产精品久久久久久亚洲影视 | 国产va在线观看 | 日韩精品久久 | 国产黄色片视频 | 亚洲男人在线 | 在线观看a视频 | 久久高清免费视频 | 午夜精品视频在线 | 99精品在线 | 99视频在线观看免费 |