在MySql中我可以有一个带有自动增量列的表并以这种方式插入:
INSERT INTO tbl VALUES(null, "bla", "bla");
有没有办法用Microsoft SQL Server Express执行此操作?
而不是:
INSERT INTO tbl(`v1`, `v2`) VALUES ("bla", "bla");
由于
答案 0 :(得分:5)
在Sql Server中,你不需要为identity列指定一个值(我猜这是mysql中的null正在做的事情)。
因此,插入表格的简短语法是:
Insert Into tbl Values('bla', 'bla')
无论是否将列声明为表的主键,它都适用,并且也适用于表中列的任何位置。也就是说,即使列位于中间,如下所示:
Create Table tbl (
[Col1] [varchar](50) NULL,
[Id] [int] IDENTITY(1,1) NOT NULL,
[Col2] [varchar](50) NULL
)
Sql Server仍然会很乐意解释insert语句并处理身份插入。
正如其他海报所提到的,在Sql Server中,您实际上需要发出Set Identity_Insert tbl On
命令才能为标识列指定值。
答案 1 :(得分:0)
我认为您在询问是否可以在insert语句中包含对identity列的引用,并在Values或Select子句中传递null或其他一些魔术值。你不能。除非使用SET IDENTITY_INSERT [table] ON并传递实际值,否则不能传递标识列的值。
答案 2 :(得分:0)
INSERT INTO tbl VALUES(null, 'bla', 'bla');
作品;使用单引号。
来自http://msdn.microsoft.com/en-us/library/ms174335.aspx
“如果值列表中的值为 与列不同的顺序 在表中或没有值 对于表格中的每一列, column_list必须用于显式 指定存储每个的列 传入价值。“