Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何关闭GORM的标识\u插入_Sql Server_Go_Go Gorm - Fatal编程技术网

Sql server 如何关闭GORM的标识\u插入

Sql server 如何关闭GORM的标识\u插入,sql-server,go,go-gorm,Sql Server,Go,Go Gorm,我想关闭IDENTITY\u INSERT以使用GORM插入数据,而不指定任何ID 我试试这个: func main() { db, err := gorm.Open("mssql", "...") //... db.DropTable(&User{}) db.CreateTable(&User{}) db.Exec("SET IDENTITY_INSERT users OFF;") <-- this doesn't work

我想关闭
IDENTITY\u INSERT
以使用GORM插入数据,而不指定任何ID

我试试这个:

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"},
}
在英语中:

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"}

有人知道吗?

如果您确实需要这样做,并且很少有这样的情况,您必须像这样启用此功能(设置标识列的值)


如果您不尝试设置标识列的值,请从查询中删除语句set identity\u Insert dbo.users Off部分。

您必须使用事务

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
}

你能定义“这不起作用”吗?这意味着什么?GORM代表什么?@MisterPositive如果您将鼠标悬停在标记上,您将看到:
GORM是Grails的对象关系映射(ORM)实现。
@TT-LOL,错过了该标志。duh…当ID列明显是标识列时,是否确实要为该列插入显式值?标识列中的值应该由数据库引擎生成,而不是由您在表示层生成。我在上面的代码示例中没有看到on部分,错误清楚地表明Identity\u Insert设置为off。必须关闭以下Identity\u Insert,才能插入没有特定IDNo的元素--必须将Identity\u Insert设置为On,以允许在需要为Identity列指定值的位置插入,然后通过关闭它来禁用它。包含的代码是插入到具有标识列的表中的正确方法。它不适用于ON值..:(有同样的错误
Set Identity_Insert dbo.users On
Insert Into users (YOURIDENTITYCOLUMN, NAME)
Values(1, 'your value')
Set Identity_Insert dbo.users Off
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
}