在MySQL我有一个自动增量列的表,并插入方式:短Sql插入语句?
INSERT INTO tbl VALUES(null, "bla", "bla");
有没有办法使用Microsoft SQL Server Express来做到这一点?
取而代之的是:
INSERT INTO tbl(`v1`, `v2`) VALUES ("bla", "bla");
感谢
在MySQL我有一个自动增量列的表,并插入方式:短Sql插入语句?
INSERT INTO tbl VALUES(null, "bla", "bla");
有没有办法使用Microsoft SQL Server Express来做到这一点?
取而代之的是:
INSERT INTO tbl(`v1`, `v2`) VALUES ("bla", "bla");
感谢
在Sql Server中,你不需要为标识列指定一个值(我猜这是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
命令以便能够为标识列指定一个值。
谢谢,没有想到它那么简单:) – Adir
我认为你是问你是否可以包括对身份列的引用在INSERT语句,并传递一个空或其他一些魔法值值或选择子句。你不能。除非您使用SET IDENTITY_INSERT [table] ON并传递实际值,否则不能传递标识列的值。
INSERT INTO tbl VALUES(null, 'bla', 'bla');
工程;使用单引号。
从http://msdn.microsoft.com/en-us/library/ms174335.aspx
“如果在值列表中的值是 不会以相同的顺序在表中列 或没有在表中每列的值 , column_list中必须用于明确 指定存储每个 传入值的列。“
为什么要省略INSERT列表中的列?这只会增加后续向表中添加新列(对于默认值不可为空或不可空)的难度。我谈到了这一点(虽然重新:INSERT ... SELECT,但同样适用于INSERT ... VALUES):http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/bad-habits -to-kick-using-select-omitting-the-column-list.aspx –