问题描述
代码:
CREATE TABLE sqlalchemy_generic_types
(
'No.' INT NOT NULL AUTO_INCREMENT,'Object Name' VARCHAR(25) NOT NULL,'Description' VARCHAR(100) NOT NULL,PRIMARY KEY('No.')
);
错误:
(pyodbc.ProgrammingError) ('42000',"[42000] [Microsoft][ODBC Driver 17 for sql Server][sql Server]'AUTO_INCREMENT' 附近的语法不正确。(102) (sqlExecDirectW)") [sql: /* 创建表 */ 创建表 sqlalchemy_generic_types ( '不。' INT NOT NULL AUTO_INCREMENT,'对象名称' VARCHAR(25) NOT NULL,'描述' VARCHAR(100) NOT NULL,主键('编号') );] (此错误的背景:http://sqlalche.me/e/13/f405)
解决方法
SQL Server 不支持自动递增。 SQL Server —— 或任何其他数据库 —— 也不支持列名的单引号(据我所知)。
我建议将声明写为:
CREATE TABLE sqlalchemy_generic_types (
sqlalchemy_generic_type_id INT IDENTITY(1,1) PRIMARY KEY,ObjectName VARCHAR(25) NOT NULL,Description VARCHAR(100) NOT NULL
);
注意变化:
-
IDENTITY()
为 id 分配一个递增的值。 -
id
被赋予了一个有意义的名称。 - 从
ObjectName
中删除了空格,因此不需要对名称进行转义。 - 定义表格不需要转义字符。
如果列名包含特殊字符或空格,您需要为列名提供 double quotes
。
Auto_increment
? -- 您一定在寻找 identity(1,1)
您可以使用以下查询:
CREATE TABLE sqlalchemy_generic_types (
"No." INT NOT NULL identity(1,1),"Object Name" VARCHAR(25) NOT NULL,"Description" VARCHAR(100) NOT NULL,PRIMARY KEY("No.")
);