SQL插入缺少列和无效列名称的查询

时间:2014-09-03 14:35:05

标签: sql sql-server sql-server-2008

我尝试运行基本的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列上收到无效的列名错误

3 个答案:

答案 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?

希望它有所帮助,