2016-02-26 68 views
-1

比方說,我有這個表:TSQL:檢查數據插入到表

CREATE TABLE [dbo].[finaleTable](
    [VENDId] [bigint] NOT NULL, 
    [companyName] [nvarchar](4) NULL, 
    ----Others field 

    CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED ([VENDId]) 
) ON [PRIMARY] 
GO 

而這個查詢:

INSERT INTO dbo.finaleTable 
SELECT * 
FROM Tmp1 

將數據插入到表之前,我必須在檢查完整性約束這兩個領域。如果這些值存在,則移動到從表格TMP1獲取的下一行數據。如果它們不存在,則插入該行。

你能建議我該怎麼辦?

+0

'那裏TMP1。 VENDId不在(從dbo.finaleTable中選擇VENDId)'? –

+2

[如何避免SQL Server中的INSERT INTO SELECT查詢中出現重複?](http://stackoverflow.com/questions/2513174/how-to-avoid-duplicates-in-insert-into-select-query- in-sql-server) –

+0

@AlexK。我認爲你的解決方案可以做到這一點,我會測試 – stoner

回答

1

我認爲你需要MERGE這樣的:

MERGE dbo.finaleTable AS target 
USING (SELECT VENDId, companyName... FROM Tmp1) AS source 
ON target.VENDId = source.VENDId AND ISNULL(target.companyName,'') = ISNULL(source.companyName,'') 
WHEN NOT MATCHED THEN 
    INSERT (VENDId, companyName...) 
    VALUES (source.VENDId, source.companyName...) 

如果需要進行檢查companyName它必須是NOT NULL

+0

謝謝!奇蹟般有效 – stoner

1

您還可以使用其中存在 -

insert into finaleTable 
select * from table1 as a 
where not exists(select 1 from finaleTable as b where b.VENDId = a.VENDId)