Microsoft SQL Server中“unsigned”附近的语法不正确

jhkqcmku  于 2022-11-28  发布在  SQL Server
关注(0)|答案(2)|浏览(498)

我使用的是最新的SQL服务器和Management Studio,此查询出错
请参见下面的查询

CREATE TABLE messages_server (
Id int unsigned NOT NULL AUTO_INCREMENT,
SentTime datetime,
MessageRead BIT,
Content varchar(8000),
MessageCategory varchar(255),
MessageUser varchar(255),
PRIMARY KEY (Id)
)
juzqafwq

juzqafwq1#

Microsoft SQL Server不支援不带负数号的整数类型,也不支援保留字AUTO_INCREMENT。您似乎从另一个数据库引擎产生指令码,并尝试在SQL Server上执行它。应该会执行下列更正的指令码。

CREATE TABLE messages_server (
Id int NOT NULL IDENTITY,
SentTime datetime,
MessageRead BIT,
Content varchar(8000),
MessageCategory varchar(255),
MessageUser varchar(255),
PRIMARY KEY (Id)
)
f1tvaqid

f1tvaqid2#

正如注解中提到的,首先SQLServer不支持数据类型签名的选择;所有数值数据类型都是有符号数据类型,但tinyint除外,它是无符号的1字节整数。如果要确保列始终为正值,请使用CHECKCONSTRAINT
T-SQL也不使用AUTO_INCREMENT,而是使用IDENTITY
因此,您可能需要类似于下面的代码。注意,我还命名了主键,因为命名CONSTRAINT s很重要:

CREATE TABLE dbo.messages_server (Id int NOT NULL IDENTITY(1, 1),
                                  SentTime datetime,
                                  MessageRead bit, --Should this be NULLable?
                                  Content varchar(8000),
                                  MessageCategory varchar(255),
                                  MessageUser varchar(255),
                                  CONSTRAINT PK_messages_server PRIMARY KEY (Id),
                                  CONSTRAINT chk_id_signed CHECK (Id >= 0));

相关问题