【问题标题】:SQL Insert query with missing column and Invalid column name缺少列和无效列名的 SQL 插入查询
【发布时间】:2014-09-03 14:35:05
【问题描述】:

我正在尝试运行基本的插入 sql 查询。

这里是插入 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 列上收到无效列名错误

【问题讨论】:

  • 如何将默认值推送到不存在的列中?
  • 它必须是单独的语句,您可以检查列是否存在并根据结果执行适当的代码。见stackoverflow.com/questions/133031/…

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


【解决方案1】:

您可以尝试以下方法:

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。

重要提示:如果您在表中随机添加和删除列,您的应用程序设计似乎很糟糕。我建议你通过修复系统的底层设计来解决这个问题,所以不需要这样的努力。

【讨论】:

  • 我希望事情就这么简单,但感谢您的帮助。尽管这对我没有帮助,但至少我现在知道我正朝着正确的方向前进。我想确保我没有错过任何东西。谢谢!!
  • 将尝试更改设计,我使用 Pivot sql 不是那么容易,但会试一试。
【解决方案2】:

我不确定您要查找的内容,如果您只想使用表 tblXX 中第三列没有值的数据填充表 tblABC,这里是使用默认值:

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

希望这会对你有所帮助。

【讨论】:

    【解决方案3】:

    您可以做的是,当您创建表时,您可以在第三列中设置默认值 0,这样您就不必使用 if 语句。然后,您可以指定要插入值的列,或者为没有值的值设置 null。

    参考这个帖子:

    How to insert default values in SQL table?

    希望对你有帮助,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 2016-04-21
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 2019-05-07
      相关资源
      最近更新 更多