2010-03-07 147 views
1

在MySQL我有一个自动增量列的表,并插入方式:短Sql插入语句?

INSERT INTO tbl VALUES(null, "bla", "bla"); 

有没有办法使用Microsoft SQL Server Express来做到这一点?

取而代之的是:

INSERT INTO tbl(`v1`, `v2`) VALUES ("bla", "bla"); 

感谢

+0

为什么要省略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 –

回答

4

在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命令以便能够为标识列指定一个值。

+0

谢谢,没有想到它那么简单:) – Adir

0

我认为你是问你是否可以包括对身份列的引用在INSERT语句,并传递一个空或其他一些魔法值值或选择子句。你不能。除非您使用SET IDENTITY_INSERT [table] ON并传递实际值,否则不能传递标识列的值。

0

INSERT INTO tbl VALUES(null, 'bla', 'bla');

工程;使用单引号。

http://msdn.microsoft.com/en-us/library/ms174335.aspx

“如果在值列表中的值是 不会以相同的顺序在表中列 或没有在表中每列的值 , column_list中必须用于明确 指定存储每个 传入值的列。“