![](/img/trans.png)
[英]Inserting into table with an Identity column while replication causes error in SQL Server
[英]Python pyODBC : Issue inserting into a sql server table with an identity column
使用 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 驱动程序][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
没有你的代码有点难以判断,但这里有一个例子。
在数据库中创建一个测试表
CREATE TABLE dbo.test(
ID INT IDENTITY NOT NULL PRIMARY KEY,
Name VARCHAR(40) NOT NULL
);
然后在 Python 中指定要插入的列
import pyodbc
warecn = pyodbc.connect("Your Connection Stuff")
Inscursor = warecn.cursor()
Inscursor.execute("Insert into dbo.test(name) values ('This'), ('is'), ('a'), ('test')")
Inscursor.commit()
Inscursor.close()
del Inscursor
warecn.close()
认识到它有点晚了但是......我最近使用一些旧程序和 ODBC 遇到了同样的问题。 解决方案是在 SQL Server 中创建一个仅包含所需列(即 A 和 B 在您的情况下)的视图,然后插入到该视图中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.