3

IDENTITY_INSERTGORMでIDを指定せずにデータを挿入する機能をOFFにしたい。

私はこれを試します:

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

誰かが何か考えがありますか?

4

2 に答える 2

0

本当にこれを行う必要があり、まれにこの機能を有効にする必要がある場合 (ID 列の値を設定するため) のように

Set Identity_Insert dbo.users On
Insert Into users (YOURIDENTITYCOLUMN, NAME)
Values(1, 'your value')
Set Identity_Insert dbo.users Off

ID 列の値を設定しようとしていない場合は、ステートメント SET Identity_Insert dbo.users Off 部分をクエリから削除します。

于 2016-10-21T13:58:46.720 に答える