![](/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.