如果 Table1 中尚不存在 Table1 中的值,我将尝试使用 Table2 中的值填充它们。
Table1 有一个 UNIQUEIDENTIFIER 约束,并指定了默认值 NEWID()。
我正在使用 SELECT DISTINCT 语句从 Table2 中获取结果,最终只是创建了一个视图来为我执行此操作。我会预先声明 Table2View中没有重复的值。
我还尝试将 SELECT 语句的结果放到临时表中,并使用NEWID()
从那里提取值在临时表上填充 GUID。到目前为止,无论我尝试过什么都会产生相同的错误。
违反 UNIQUE KEY 约束“constraintname”。无法在对象“dbo.table1”中插入重复键。重复键值为 NULL。
这是 Table1 上的 CREATE TO:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Table1]
(
[UID] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[DataID] [varchar](10) NULL,
[DataName] [varchar](100) NULL,
[DataType] [varchar](10) NULL,
[DateLastPopulated] [date] NULL,
[LastAmount] [bigint] NULL,
[DateRecordCreated] [datetime] NULL,
[DateLastModified] [datetime] NULL,
PRIMARY KEY CLUSTERED ([UID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
UNIQUE NONCLUSTERED ([DataID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Table1]
ADD CONSTRAINT [DF_Table1_UID] DEFAULT (NEWID()) FOR [UID]
GO
ALTER TABLE [dbo].[Table1]
ADD CONSTRAINT [CNST_Table1_CreateDate] DEFAULT (GETDATE()) FOR [DateRecordCreated]
GO
ALTER TABLE [dbo].[Table1] WITH CHECK
ADD CONSTRAINT [FK_Table1_ForeignTable]
FOREIGN KEY([ForeignID]) REFERENCES [dbo].[ForeignTable] ([ForeignID])
GO
ALTER TABLE [dbo].[Table1] CHECK CONSTRAINT [FK_Table1_ForeignTable]
GO
这是我正在运行以填充表的查询:
INSERT INTO [dbo].[Table1] ([UID], DataName, DateLastPopulated, LastAmount)
SELECT NEWID(), B.DataName, B.DateLastPopulated, B.LastAmount
FROM [dbo].[Table2_View] B
LEFT JOIN [dbo].[Table1] A ON B.DataName = A.DataName
WHERE A.DataName IS NULL
我已经单独运行了SELECT
语句,INSERT
没有NULL
值也没有重复值。查询运行良好并NEWID()
填充 GUID。
但是,将SELECT
语句添加到INSERT INTO
会产生错误。
任何帮助都将不胜感激。我已经用谷歌搜索了这个问题到精神错乱的地步。