问题描述
我有以下脚本,该脚本使用游标将记录插入表中,如果它们不存在于该表中。这可行,但我想修改它以插入整个记录,而不必分别指定每个字段。是否可以引用整个记录并将其插入?
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)
指定列名称始终是一个好习惯。