我尝试运行基本的Insert sql查询。
这是insert sql。
Insert into tblABC( X1,X2,X3)
Select X1,X2,X3 from tblXX
问题是tblXX
没有X3
列。
有时会X3
出现,有时会丢失。如果缺少列,则按下默认值,例如0
。
尝试使用Case语句
CASE WHEN EXISTS (SELECT 1 From information_schema.Columns C
Inner Join Sys.Objects O
On ( O.Object_Id = Object_Id(N'tblXX') And O.Name = C.Table_Name)
and C.Column_Name = 'X3') THEN X3
ELSE 0
END
我在X3列上收到无效的列名错误
答案 0 :(得分:4)
您可以尝试以下操作:
if (exists (select 1 from information_schema.columns where table_name = 'tblXX' and column_name = 'X3'))
begin
Insert into tblABC(X1, X2, X3)
Select X1, X2, X3
from tblXX;
end
else
begin
Insert into tblABC(X1, X2, X3)
Select X1, X2, 0
from tblXX;
end;
如果这不起作用(因为if
失败),那么你需要求助于动态SQL。
一个重要的注意事项:如果您在表中随机添加和删除列,您的应用程序设计似乎很差。我建议您通过修复系统的底层设计来解决这个问题,因此不需要这样的工作。
答案 1 :(得分:0)
我不确定您要查找的内容,如果您只想在表tblABC
中填充表tblXX
中没有第三列值的数据,这里是使用默认值的查询:
INSERT INTO tblABC(X1, X2, X3)
SELECT T.X1
,T.X2
,0
FROM tblXX T
如果您只想使用tblXX
中不存在的默认值,则查询将如下:
INSERT INTO tblABC(X1, X2, X3)
SELECT T.X1
,T.X2
,CASE
WHEN T.X3 IS NULL THEN 0
ELSE T.X3
END
FROM tblXX T
希望这会对你有所帮助。
答案 2 :(得分:0)
您可以做的是在创建表时,可以在第三列中放置默认值0,这样您就不必使用if语句。然后,您可以只指定要插入值的列,或者将null设置为没有值的值。
参考这个帖子:
How to insert default values in SQL table?
希望它有所帮助,