【问题标题】:SQL cannot identify datatype SERIALSQL 无法识别数据类型 SERIAL
【发布时间】:2021-01-23 08:51:52
【问题描述】:

提前致谢,
我不明白为什么 SERIAL 未被识别为数据类型。
代码真的很简单。
我还有一个问题: 由于 SERIAL 不是真正的类型,我是否必须在某个地方定义它?

CREATE TABLE flights (
    id SERIAL PRIMARY KEY,
    origin VARCHAR NOT NULL,
    destination VARCHAR NOT NULL,
    duration INTEGER NOT NULL,
);

【问题讨论】:

  • 因为 SQL Server does not have that type - 它是 PostgreSQL 特定类型。
  • aah,postgreSQL 和 SQL 有很大区别吗?
  • PostgreSQL 使用 SQL 作为它的查询语言(就像每个关系数据库一样)。但是是的,PostgreSQL 和 Microsoft SQL Server(或任何其他数据库产品)之间存在差异。
  • @AleksandreBregadze 数据库产品彼此之间非常不同。没有数据库提供的只是基本的 SQL 标准合规性。所有数据库都使用自己的扩展
  • SERIAL 是一个自增整数。您可以使用int IDENTITY(1,1) 创建相同的内容。要长,请使用bigint IDENTITY(1,1)

标签: sql sql-server sqldatatypes


【解决方案1】:

您的表定义应如下所示:

CREATE TABLE flights (
    id INT IDENTITY(1, 1) PRIMARY KEY,
    origin VARCHAR(255) NOT NULL,
    destination VARCHAR(255) NOT NULL,
    duration INTEGER NOT NULL,
);

如 cmets 中所述,serial 来自 Postgres。即使在那个数据库中,它的使用现在也已经过时,取而代之的是generated always as identity

我不知道origindestination 的长度是多少。但 。 . .在 SQL Server 中,从不使用 char() 或没有长度的相关类型。默认长度因上下文而异,这方面的错误很难调试。

【讨论】:

    【解决方案2】:

    看来您必须探索更多关于数据类型的 SQL Server 文档:https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-types-transact-sql?view=sql-server-ver15

    在 PostgreSQL 中的 SERIAL 在 SQL Server 上转换为 INT IDENTITY

    也就是说,第二列 origin 被声明为没有长度的 VARCHAR。我不确定它是否会默认为 1 个或 30 个位置。无论如何,我会建议不要使用没有明确长度的 VARCHAR...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多