【问题标题】:How to insert identity column in SQL Server with null values like in MySQL如何在 SQL Server 中插入具有空值的标识列,如 MySQL
【发布时间】:2014-02-15 14:49:05
【问题描述】:

如何在 SQL Server 中插入带有空值的标识列,如 MySQL?

在 MySQL 中,我们可以为自动递增的列放置 null 和插入值。如何在 SQL Server 中执行此操作?

例子:

在 MySql 中:

CREATE TABLE `employee` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NOT NULL,
  `phone` VARCHAR(45),
  `salary` DOUBLE NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`)
)
ENGINE = InnoDB;

上表中的id是auto inc,表示SQL Server中的标识,将值插入上表MySQL支持下面的查询

INSERT INTO `employee` (`id`,`name`,`phone`,`salary`) 
VALUES (null,'Harry','9985099850',60000);

MySQL 自动将 auto inc id 插入到标识列,但是 SQL Server 怎么做呢?

请指导我如何在 SQL Server 中执行此操作。我几天来一直在这里苦苦挣扎,以使用 JDBC 在我的应用程序中解决这个问题。

【问题讨论】:

  • 您不能在 SQL Server 中执行此操作 - 如果您有一个 IDENTITY 列,正常的用例是让 SQL Server 自动分配一个值,但只是不在您的 INSERT 列中指定该列列表; SQL Server 将自动分配一个新值

标签: sql-server insert identity


【解决方案1】:

这应该可以解决问题:

CREATE TABLE employee (
id INTEGER IDENTITY(1,1) PRIMARY KEY,
name VARCHAR(45) NOT NULL,
phone VARCHAR(45),
salary FLOAT DEFAULT 0 NOT NULL
);

当您插入此表时,从插入/选择列表中省略“id”,SQL Server 将为您处理。

例如:

INSERT INTO employee (name,phone,salary) 
VALUES ('Harry','9985099850',60000);

【讨论】:

  • 这是在 SQL Server 中使用 IDENTITY 列的方法 - 但它确实NULL 插入到 id - 相反,SQL Server 将确定一个id 的值自动插入并插入
  • 是的,我们可以做到。但我正在编写一个需要支持 mysql 和 ms sql-server DB 的通用 crud 应用程序。请通过传递 null 来指导我们如何做到这一点。
  • 如果列是IDENTITY,很遗憾你不能在SQL Server中插入NULL。
  • 谢谢,我将使用 ResultSetMetaData 并获取标识列,我将从插入查询中删除标识并继续我的工作。感谢 cmets 和答案。
  • 我在我的应用程序中看到了这个问题,想澄清一下。我正在使用具有插入语句(通过 Hibernate)的工具,例如 INSERT into MyTable (id, ...) VALUE (null, ...)。对于 MySQLt,null 被转换为自动增量;对于 SQL Server 是一个例外。我不想编辑数百万行代码中的标签,而是编辑 Hibernate 配置文件以使其工作
猜你喜欢
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
相关资源
最近更新 更多