【发布时间】:2019-08-26 10:03:52
【问题描述】:
使用 Python 创建的 INSERT 语句在我执行和提交时给我一个错误。我从 Python 中获取了该语句的副本并自己在 SQL SERVER 中运行它,它在那里运行良好。我试图插入的表有一个标识列。当 Python 尝试执行时,当我在语句中排除标识列时,它会给我一个错误提示
表看起来像这样 MY_TABLE (ID INT IDENTITY(1,1) NOT NULL, A INT, B INT)
INSERT INTO MY_TABLE (A, B) VALUES(VALUE_A, VALUE_B);
"('23000', "[23000] [Microsoft][ODBC SQL Server Driver][SQL Server]无法将值 NULL 插入列 'MY_IDENTITY_COLUMN',表 'MY_TABLE';列不允许空值。插入失败. (515) (SQLExecDirectW); [23000] [Microsoft][ODBC SQL Server Driver][SQL Server]语句已终止。(3621)")"
但是当我尝试包含 Identity 列的值时(我不想这样做),我收到以下错误,这是有道理的,因为它是我们让表自动递增的标识列
“当 IDENTITY_INSERT 设置为 OFF 时,无法为表 'MY_TABLE' 中的标识列插入显式值。”
当我在 SQL SERVER 中运行查询时,表会填充标识列本身的值并自动递增,但由于某种原因,当我在 Python 中运行语句时,它不会这样做并尝试传递 NULL
SQL SERVER 版本:10.50.6560.0
【问题讨论】:
-
您正在尝试向
IDENTITY列插入一个值,除非您设置IDENTITY_INSERT OFF,否则您不应该这样做。 -
正确,但是就像我上面所说的,当我没有为该列传递任何值时,我也会收到第一个错误,当我声明没有值时,我的意思是这样 INSERT INTO MY_TABLE (IDENTITY_COLUMN, A, B, ) VALUES (VALUE_A,VALUE_B)
-
排除列,这样每件事都会正常工作。
-
第一个错误是当我排除列时
标签: sql sql-server python-3.x pyodbc