在我的 SQL 腳本中,我有大約 200 多個帶有INSERT陳述句的條目。我的腳本如下所示:
SET IDENTITY_INSERT [BH].[LanguageFiles]
GO
INSERT INTO [BH].[LanguageFiles] ([Id], [Key], [Secret], [LangId], [Value])
VALUES (44, N'HomePage', NULL, 8, N'Welcome to the app')
GO
INSERT INTO [BH].[LanguageFiles] ([Id], [Key], [Secret], [LangId], [Value])
VALUES (45, N'LogIn', NULL, 8, N'Enter your assigned credentials')
GO
INSERT INTO [BH].[LanguageFiles] ([Id], [Key], [Secret], [LangId], [Value])
VALUES (46, N'LogOut', NULL, 8, N'Come back soon')
GO
INSERT INTO [BH].[LanguageFiles] ([Id], [Key], [Secret], [LangId], [Value])
VALUES (47, N'RedirectAbout', NULL, 8, N'About Us')
GO
INSERT INTO [BH].[LanguageFiles] ([Id], [Key], [Secret], [LangId], [Value])
VALUES (48, N'Contact', NULL, 8, N'Consultation')
GO
SET IDENTITY_INSERT [BH].[LanguageFiles] OFF
GO
這里有 200 多條INSERT INTO陳述句。如果它更短,我可以做這樣的事情:
IF NOT EXISTS ( SELECT * FROM [BH].[LanguageFiles] WHERE Id = 46)
INSERT INTO [BH].[LanguageFiles] ([Id], [Key], [Secret], [LangId], [Value])
VALUES (46, N'LogOut', NULL, 8, N'Come back soon')
但是,在有這么多條目的情況下,這是不可行的。我能做些什么來解決這個問題?
目前,當我運行此腳本時,出現以下錯誤:
例外訊息:違反主鍵約束“Tbl_LanguageFiles”。無法在物件“[BH].[LanguageFiles]”中插入重復鍵。重復鍵值為 (46)
解決方案
謝謝大家的回答。然而,一種解決方法是使用它IF NOT EXISTS,這看起來很長,因為我必須為所有 250 個條目撰寫它。我最終將其復制到 Excel 中,并使用其各自的條件在之前CONCAT插入IF NOT EXISTS陳述句。
uj5u.com熱心網友回復:
你能試試這個
CREATE TEMPORARY TABLE [BH].[LanguageFiles1]
AS
SELECT * FROM [BH].[LanguageFiles]
WHERE 1=2;
GO
INSERT [BH].[LanguageFiles1] ([Id], [Key], [Secret], [LangId], [Value]) VALUES(44,N'HomePage',NULL,8,N'Welcome to the app')
GO
INSERT [BH].[LanguageFiles1] ([Id], [Key], [Secret], [LangId], [Value]) VALUES(45,N'LogIn',NULL,8,N'Enter your assigned credentials')
GO
INSERT [BH].[LanguageFiles1] ([Id], [Key], [Secret], [LangId], [Value]) VALUES(46,N'LogOut',NULL,8,N'Come back soon')
GO
INSERT [BH].[LanguageFiles1] ([Id], [Key], [Secret], [LangId], [Value]) VALUES(47,N'RedirectAbout',NULL,8,N'About Us')
GO
INSERT [BH].[LanguageFiles1] ([Id], [Key], [Secret], [LangId], [Value]) VALUES(48,N'Contact',NULL,8,N'Consultation')
GO
SET IDENTITY_INSERT [BH].[LanguageFiles]
GO
INSERT [BH].[LanguageFiles] ([Id], [Key], [Secret], [LangId], [Value])
SELECT [Id], [Key], [Secret], [LangId], [Value]
FROM LanguageFiles1
WHERE ID NOT IN (SELECT ID FROM [BH].[LanguageFiles])
GO
SET IDENTITY_INSERT [BH].[LanguageFiles] OFF
uj5u.com熱心網友回復:
您可以將 anINSERT INTO ... SELECT與存在子句一起使用,例如
INSERT [BH].[LanguageFiles] ([Id], [Key], [Secret], [LangId], [Value])
SELECT 44, N'HomePage', NULL, 8, N'Welcome to the app'
WHERE NOT EXISTS (SELECT 1 FROM [BH].[LanguageFiles] WHERE Id = 44);
uj5u.com熱心網友回復:
解決方案
謝謝大家的回答。然而,一種解決方法是使用它IF NOT EXISTS,這看起來很長,因為我必須為所有 250 個條目撰寫它。我最終在 Excel 中復制了它,并使用CONCACT它在之前插入了 `IF NOT EXISTS 陳述句及其各自的條件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/466598.html
上一篇:獲取作業日(周一至周五)并在查詢中將其替換為“介于”
下一篇:按郵政編碼回傳學生名單
