今天在往同一个表中拷贝几行数据,只是改变其中的几个字段,遇到了问题,当执行第一个SQL的时候一直报错,
Msg 1038, Level 15, State 5, Line 1
缺少对象或列名,或者对象或列名为空。对于 SELECT INTO 语句,请确保每列均具有名称。对于其他语句,请查找空的别名。不允许使用定义为 "" 或 [] 的别名。请将别名更改为有效名称。
后来仔细看了这两个语句的区别才知道:
1.INSERT INTO SELECT语句
语句形式为:Insert into Table2(field1,field2,...) select value1,value2,... from Table1
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。
2.SELECT INTO FROM语句
语句形式为:SELECT vale1, value2 into Table2 from Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。
--select into语句
SELECT 'BenQGuru.eHR.LMS.LMSImportBL.LMSTeacherImportBL' ,
temp.ResourceKey ,
temp.CultureCode ,
temp.ResourceValue ,
temp.CreationTime ,
temp.CreatedBy ,
temp.LastUpdateTime ,
temp.LastUpdatedBy
INTO SYSPRIVATESTRINGRESOURCES
FROM SYSPRIVATESTRINGRESOURCES temp
WHERE temp.ResourceClass = 'BenQGuru.eHR.LMS.Common.UI.DropDownListBI'
AND ResourceKey IN ( 'RSK20050418084308_1', 'RSK20050418084308_2',
'RSK20050418084308_3', 'RSK20050418084308_4' )
--insert into select语句
INSERT INTO SYSPRIVATESTRINGRESOURCES
SELECT 'BenQGuru.eHR.LMS.LMSImportBL.LMSTeacherImportBL' ,
temp.ResourceKey ,
temp.CultureCode ,
temp.ResourceValue ,
temp.CreationTime ,
temp.CreatedBy ,
temp.LastUpdateTime ,
temp.LastUpdatedBy
FROM SYSPRIVATESTRINGRESOURCES temp
WHERE temp.ResourceClass = 'BenQGuru.eHR.LMS.Common.UI.DropDownListBI'
AND ResourceKey IN ( 'RSK20050418084308_1',
'RSK20050418084308_2',
'RSK20050418084308_3',
'RSK20050418084308_4' )