检查是否存在游标后插入整个记录

问题描述

我有以下脚本,该脚本使用游标将记录插入表中,如果它们不存在于该表中。这可行,但我想修改它以插入整个记录,而不必分别指定每个字段。是否可以引用整个记录并将其插入?

SET @Cursor = CURSOR FOR
SELECT [COMPANY],[LOCATION],[id] FROM [GG].[dbo].[LOCATION]

 OPEN @Cursor;
FETCH NEXT FROM @Cursor INTO @COMPANY,@Location,@id;

WHILE @@FETCH_STATUS = 0
BEGIN
    select @numFound = count(*) FROM [GG].[dbo].[gsLocation] where company = @COMPANY and location = @Location;
    IF @numFound = 0
    BEGIN
        -- Want to be able to insert entire record instead of specifying fields
        insert into [GG].[dbo].[gsLocation] (company,Location,id) values (@COMPANY,@id)
    END

    FETCH NEXT FROM @Cursor INTO @COMPANY,@id;
END

解决方法

您可以不用光标就简单得多:

Insert into [GG].[dbo].[gsLocation] (COMPANY,LOCATION,id)
Select  L.COMPANY,L.LOCATION,L.id
From [GG].[dbo].[LOCATION] L
where not exists (Select * From [GG].[dbo].[gsLocation] where company = L.COMPANY and location = L.LOCATION)

指定列名称始终是一个好习惯。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...