TSQL:检查将数据插入 table
TSQL : Check inserting data into the table
假设我有这个 table :
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
在将数据插入 table 之前,我必须检查这两个字段的完整性约束。如果值存在,则移至从 table TMP1 获取的下一行数据。如果它们不存在,则插入该行。
你能建议我如何才能做到这一点吗?
我认为你需要 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
你也可以使用 where exists -
insert into finaleTable
select * from table1 as a
where not exists(select 1 from finaleTable as b where b.VENDId = a.VENDId)
假设我有这个 table :
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
在将数据插入 table 之前,我必须检查这两个字段的完整性约束。如果值存在,则移至从 table TMP1 获取的下一行数据。如果它们不存在,则插入该行。
你能建议我如何才能做到这一点吗?
我认为你需要 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
你也可以使用 where exists -
insert into finaleTable
select * from table1 as a
where not exists(select 1 from finaleTable as b where b.VENDId = a.VENDId)