【问题标题】:Short Sql insert Statement?短sql插入语句?
【发布时间】:2010-03-07 19:48:32
【问题描述】:

在 MySql 中,我可以有一个带有自动增量列的表并以这种方式插入:

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

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

而不是这个:

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

谢谢

【问题讨论】:

  • 为什么要从 INSERT 列表中省略列?这只会使以后向表中添加新列(默认值不为空,或可为空)变得更加困难。我在这里谈到了这个(尽管重新:INSERT ... SELECT,但对于 INSERT ... VALUES 也是如此):sqlblog.com/blogs/aaron_bertrand/archive/2009/10/10/…

标签: sql mysql sql-server


【解决方案1】:

在 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 仍然会很高兴地解释插入语句并处理身份插入。

正如其他海报所提到的,在 Sql Server 中,您实际上需要发出 Set Identity_Insert tbl On 命令才能为标识列指定值。

【讨论】:

  • 谢谢,没想到这么简单:)
【解决方案2】:

我想您是在问是否可以在插入语句中包含对标识列的引用,并在 Values 或 Select 子句中传递 null 或其他一些神奇的值。你不能。除非您使用 SET IDENTITY_INSERT [table] ON 并传递实际值,否则您无法为标识列传递值。

【讨论】:

    【解决方案3】:

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

    作品;使用单引号。

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

    "如果值列表中的值是 与列的顺序不同 在表中或没有值 对于表中的每一列, column_list 必须用于显式 指定存储每个的列 传入值。”

    【讨论】:

      猜你喜欢
      • 2015-04-03
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      相关资源
      最近更新 更多