INSERT到表中而不指定列名

use*_*171 19 sql sql-server

INVOICE TABLE 想通过不指定列名来插入值SQL Server,我试过这个但是它不起作用.请帮忙

INSERT INTO INVOICE
VALUES( 1,1,KEYBOARD,1,15,5,75)
Run Code Online (Sandbox Code Playgroud)

Mik*_*ll' 30

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

INSERT INTO INVOICE VALUES( 1,1,'KEYBOARD',1,15,5,75);
Run Code Online (Sandbox Code Playgroud)

SQL需要围绕文本值使用单引号.

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

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

  • 刚刚在生产中的代码中断时遇到了这种情况,因为我的团队负责人刚刚在 Prod DB 上创建了与在 Staging DB 上不同的顺序的表。所以,双方都有不好的做法。 (2认同)
  • 我只想补充一点,不使用列名被称为“盲插入”,这是常见的 SQL 反模式。最糟糕的情况是 INSERT 工作但数据转到错误的列(隐式转换等)。 (2认同)

Gor*_*off 9

你为什么想做这个?不指定列名是错误的编码实践.

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

INSERT INTO INVOICE VALUES( 1,1, 'KEYBOARD',1,15,5,75)
Run Code Online (Sandbox Code Playgroud)

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

只需单击"列"名称(无需打开)并将其拖到查询窗口中即可.它将插入列列表.

  • 在 SQL studio 中拖放列的好技巧。节省了我 40 分钟的痛苦工作。 (2认同)

小智 7

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

insert into `schema`.`tablename` values(val1,val2,val3);
Run Code Online (Sandbox Code Playgroud)


Bri*_*lee 5

INSERT INTO INVOICE VALUES( 1,1,'KEYBOARD',1,15,5,75);
Run Code Online (Sandbox Code Playgroud)

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