2016-10-21 1 views
1

IDENTITY_INSERTをオフにして、IDを指定せずにGORMでデータを挿入したいとします。GORMのIDENTITY_INSERTを無効にする方法

私はこれを試してみてください。

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

EDIT:アンで

(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." 

Th電子プログラムの仕事のようなIDの値を追加する場合:

User{ID: 1, UserName: "testUserName", FirstName: "testFirstName", LastName: "TestLastName"} 

誰か考えている?

+0

「これは機能しません」と定義できますか?どういう意味ですか? –

+0

GORMは何を表していますか? –

+1

@MisterPositiveタグの上にカーソルを置くと、 'GORMはGrailsのオブジェクトリレーショナルマッピング(ORM)の実装です。 ' –

答えて

0

あなたがしようとしていない場合はそう

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

好き本当には、これを行う必要があり、あなたは(ID列の値を設定するには)この機能を有効にする必要があり、このためにまれなケースがある場合ID列の値を設定し、照会からSET Identity_Insert dbo.usersオフ部分を除去します。

+0

私はすでにこれを試して、それが動作しません – sbouaked

+0

上記のコードサンプルでON部分が表示されず、エラーが明らかにIdentity_Insertがオフに設定されていると表示されます。 –

+0

https://msdn.microsoft.com/fr-fr/library/ms188059.aspx特定のIDなしで要素を挿入するには、Identity_Insertをオフにする必要があります。 – sbouaked

関連する問題