use*_*462 8 sql sql-server insert
我有一个sql表,其中有两列id和name.我有大约20个名字的列表,我需要编写一个查询,在插入之前检查名称是否存在.
有没有更好的方法来做这个而不是只是具有以下查询20次但具有不同的名称(我需要在t-sql中执行此操作):
IF NOT EXISTS(SELECT*
FROM mytable
WHERE name = 'Dan')
BEGIN
INSERT INTO mytable
(name)
VALUES ('dan')
END
Run Code Online (Sandbox Code Playgroud)
我认为您可以使用合并语句:
MERGE INTO myTable AS Target
USING (VALUES ('name1'),('name2'),('...')) AS source (NAME)
ON Target.NAME = Source.NAME
WHEN NOT MATCHED BY TARGET THEN
INSERT (NAME) VALUES (name)
Run Code Online (Sandbox Code Playgroud)
您可以使用以下方式过滤值NOT EXISTS
INSERT INTO myTable (
Name
)
SELECT DISTINCT
Name
FROM (
VALUES ('Name 1'),
('Name 2')
) AS NewNames(Name)
WHERE
NOT EXISTS (SELECT 1 FROM TargetTable WHERE myTable.Name = NewNames.Name)
Run Code Online (Sandbox Code Playgroud)
如果您的新名称位于另一张表中,则可以更改上一张表中的选择查询。
请注意,关键字DISTINCT对于过滤掉源数据中的重复项是必需的。
INSERT INTO MyTable (Name)
SELECT NewNames.Name
FROM ( VALUES ('Name1'), ('Name2'), ('Name3') ) AS NewNames (Name)
WHERE NOT EXISTS ( SELECT 1
FROM MyTable AS MT
WHERE MT.Name = NewNames.Name );
Run Code Online (Sandbox Code Playgroud)