[英]How to turn OFF IDENTITY_INSERT for GORM
我想關閉IDENTITY_INSERT
以在不指定任何 ID 的情況下使用 GORM 插入數據。
我試試這個:
func main() {
db, err := gorm.Open("mssql", "...")
//...
db.DropTable(&User{})
db.CreateTable(&User{})
db.Exec("SET IDENTITY_INSERT users OFF;") <-- this doesn't work
for _, user := range users {
db.Create(&user)
}
}
type User struct {
ID uint
UserName string
FirstName string
LastName string
}
var users []User = []User{
User{UserName: "testUserName", FirstName: "testFirstName", LastName: "TestLastName"},
User{UserName: "testUserName", FirstName: "testFirstName", LastName: "TestLastName"},
User{UserName: "testUserName", FirstName: "testFirstName", LastName: "TestLastName"},
}
編輯:
數據不是在數據庫中創建的,我有以下錯誤(法語抱歉):
(mssql: Une valeur explicite doit être spécifiée dans la colonne d'identité de la table 'users' quand IDENTITY_INSERT est défini à ON, ou qu'un utilisateur de la réplication effectue une insertion dans une colonne d'identité NOT FOR REPLICATION.)
在 :
Cannot insert explicit value for identity column in table 'users' when IDENTITY_INSERT is set to OFF."
如果我添加 ID 值,該程序將工作,例如:
User{ID: 1, UserName: "testUserName", FirstName: "testFirstName", LastName: "TestLastName"}
有人有什么想法嗎?
你必須使用交易
tx := db.Begin()
if err := tx.Exec("SET IDENTITY_INSERT users OFF;").Error; err != nil {
return err
}
if err := tx.Commit().Error; err != nil {
return err
}
如果您真的需要這樣做,並且在極少數情況下您必須啟用此功能(設置標識列的值),如下所示
Set Identity_Insert dbo.users On
Insert Into users (YOURIDENTITYCOLUMN, NAME)
Values(1, 'your value')
Set Identity_Insert dbo.users Off
如果您不嘗試設置標識列的值,則從您的查詢中刪除語句 SET Identity_Insert dbo.users Off 部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.