2016-02-26 78 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)