почему мой код ошибки (mssql: Нарушение ограничения PRIMARY KEY 'PK_SMSBlast2'. Не удается вставить повторяющийся ключ в объект 'dbo.SMSBlast2')? - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть проблема с моим кодом, где я использую библиотеку GORM для создания или вставки данных в мои спокойные API, ошибка печати, например, так: (mssql: Нарушение ограничения PRIMARY KEY 'PK_SMSBlast2'. Невозможно вставить повторяющийся ключ вобъект 'dbo.SMSBlast2'. Дублированный ключ имеет значение (0).)

основной пакет

import (
    "encoding/json"
    "fmt"
    "github.com/gorilla/mux"
    "github.com/jinzhu/gorm"
    _ "github.com/jinzhu/gorm/dialects/mssql"
    "log"
    "net/http"
    "time"
)

тип SMSBlast struct {SequenceID int gorm:"column:SequenceID" строка мобильного телефона gorm:"column:MobilePhone" строка выводаgorm:"column:Output" WillBeSentDate * time.Time gorm:"column:WillBeSentDate" SentDate * time.Time gorm:"column:SentDate" Status * string gorm:"column:Status" DtmUpd time.Time gorm:"column:DtmUpd"}

func (SMSBlast) TableName() string {
    return "SMSBlast2"
}


func insertSMSBlast(w http.ResponseWriter, r *http.Request){
    fmt.Println("New Insert Created")

    db, err := gorm.Open("mssql", "sqlserver://sa:@localhost:1433?database=CONFINS")
    if err != nil{
        panic("failed to connect database")
    }
    defer db.Close()

    vars := mux.Vars(r)
    sequenceid := vars["sequenceid"]
    mobilephone := vars["mobilephone"]
    output := vars["output"]
    dtmupd := vars["dtmupd"]


sequenceid1,_ := strconv.Atoi(sequenceid)
prindata := db.Create(&SMSBlast{SequenceID: sequenceid1,MobilePhone: mobilephone, Output:output, DtmUpd: time.Now()})
fmt.Println(prindata)


}

func handleRequests(){
    myRouter := mux.NewRouter().StrictSlash(true)
    myRouter.HandleFunc("/smsblaststest",allSMSBlasts).Methods("POST")
    myRouter.HandleFunc("/smsblaststestInsert/{MobilePhone}/{DtmUpd}", insertSMSBlast).Methods("POST")
    log.Fatal(http.ListenAndServe(":8080",myRouter))

}

func main(){
    fmt.Println("SMSBLASTS ORM")
    handleRequests()
}

1 Ответ

0 голосов
/ 15 февраля 2019

Похоже, что для вашей таблицы SequenceID является первичным ключом.

Ваш оператор вставки

 db.Create(&SMSBlast{MobilePhone: mobilephone, Output:output, DtmUpd: time.Now()})

не обновляет поле SequenceID, поэтому по умолчанию он равен нулю.Это вызывает нарушение вашего первичного ключа.Попробуйте сделать SequenceID полем идентификации (будет автоматически увеличиваться) или исправьте свой код, чтобы определить следующий порядковый номер и добавить его в оператор создания

...