【问题标题】:INSERT into table without specifying Column names在不指定列名的情况下插入表
【发布时间】:2013-06-19 11:08:35
【问题描述】:

我有INVOICE TABLE 我想通过不指定列名来插入值 使用SQL Server,我已经尝试过了,但它不起作用..请帮助

INSERT INTO INVOICE
VALUES( 1,1,KEYBOARD,1,15,5,75)

【问题讨论】:

  • 没有您的表结构,我们将无法提供帮助...
  • 错误是什么? KEYBOARD 是什么?您是否指定了所有列?它有据可查msdn.microsoft.com/en-us/library/ms174335.aspx
  • INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);
  • @Tarek 这是 OP 试图避免的。
  • @Curt 对不起,我知道你了,但我之前有过这个,这是因为日期的默认值,所以你可以注意一下。

标签: sql sql-server


【解决方案1】:

只要您的 INSERT 语句中的列数正确,并且只要除 KEYBOARD 之外的所有值都是某种数字数据类型,并且只要您具有适当的权限,这应该可以工作。

INSERT INTO INVOICE VALUES( 1,1,'KEYBOARD',1,15,5,75);

SQL 需要在文本值周围加上单引号。

但不使用列名并不是一个好习惯。人们改变表中列的顺序并非闻所未闻。更改列的顺序也不是一个好习惯,但有些人还是坚持这样做。

如果有人这样做,并交换表中的第 5 列和第 7 列,您的 INSERT 语句仍然会成功——这两列都是数字——但 INSERT 会搞砸你的数据。

【讨论】:

  • 刚刚在生产中的代码中断时遇到了这种情况,因为我的团队负责人刚刚在 Prod DB 上创建了表,其顺序与在 Staging DB 上的顺序不同。所以,双方都有不好的做法。
  • 我只想补充一点,不使用列名称为"blind insert" ant,它是常见的 SQL 反模式。最糟糕的情况是当 INSERT 工作但数据进入错误的列时(隐式转换等)。
  • 我刚刚向表中添加了一个新的可为空列,我们在该表中进行了一些盲插入,并且生产开始出错,因为字段数量与盲中的值数量不匹配插入。我不知道我们有盲插。我的建议,不要偷懒!做一个正确的插入,免得自己头疼。
  • 更改顺序或列可能是一种不好的做法,但这可能是一个简单的错误。当您使用 alter table 添加列并且在添加列 B 之前忘记添加列 A 时,可能会发生这种情况。另一方面,不带字段名称的 INSERT 是 99.99% 的错误做法。它将停止使用列交换,但如果我在表中添加一个额外的列。如果表很大,它也会降低可读性,并强制您在所有未初始化的列中插入 null。
  • @David Liang:我想使用这种检查可能是一个正当的理由,但如果新列可以为空或具有默认值(无论如何,我看不到任何我会使用这种检查的场景)。但我仍然认为省略列名只会导致痛苦且难以跟踪的错误。这不是 DEV、PRE 和 PRO 环境中第一次列顺序不同。我真的不想依赖那个
【解决方案2】:

您为什么要这样做?不指定列名是不好的编码习惯。

不过,在您的情况下,keyboard 需要用单引号括起来:

INSERT INTO INVOICE VALUES( 1,1, 'KEYBOARD',1,15,5,75)

如果您不想键入列名,可以在 SQL Server Management Studio 中轻松获取它们。打开“对象浏览器”,打开数据库,然后选择“表”。选择Invoice 表。选项之一是“列”。

只需单击“列”名称(无需打开它)并将其拖到查询窗口中。它将插入列列表。

【讨论】:

  • 在 SQL Studio 中拖放列的好技巧。为我节省了 40 分钟的工作时间。
【解决方案3】:

是的,您可以直接将值插入到表中,如下所示:

insert into `schema`.`tablename` values(val1,val2,val3);

【讨论】:

    【解决方案4】:
    INSERT INTO INVOICE VALUES( 1,1,'KEYBOARD',1,15,5,75);
    

    您忘记在键盘中包含单引号,在 sql 中文本需要单引号

    【讨论】:

      猜你喜欢
      • 2019-11-12
      • 2011-03-30
      • 2019-11-30
      • 2014-03-17
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      相关资源
      最近更新 更多