代码之家  ›  专栏  ›  技术社区  ›  Adir

短SQL插入语句?

  •  1
  • Adir  · 技术社区  · 16 年前

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

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

    对于Microsoft SQL Server Express,有什么方法可以做到这一点吗?

    而不是这个:

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

    谢谢

    3 回复  |  直到 16 年前
        1
  •  4
  •   David Hall    16 年前

    在SQL Server中,不需要为标识列指定值(我猜这就是MySQL中的空值所做的)。

    因此,插入到表中的简短语法是:

    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 命令可以指定标识列的值。

        2
  •  0
  •   Thomas    16 年前

    我认为您在问您是否可以在insert语句中包含对identity列的引用,并在values或select子句中传递一个空值或其他一些魔力值。不,你不能。除非在上使用set identity_insert[table]并传递实际值,否则无法传递标识列的值。

        3
  •  0
  •   user285968    16 年前

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

    工作;使用单引号。

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

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