denisenkom / go-mssqldb

Microsoft SQL server driver written in go language
BSD 3-Clause "New" or "Revised" License
1.82k stars 495 forks source link

insert datetime value error #687

Open kzhui125 opened 3 years ago

kzhui125 commented 3 years ago

To Reproduce

  1. create table
CREATE TABLE [dbo].[Test2021](
    [dt] [datetime] NULL,
) ON [PRIMARY] 
GO
  1. go run main.go
package main

import (
    "database/sql"
    "fmt"
    "log"
    "time"

    mssql "github.com/denisenkom/go-mssqldb"
)

var (
    server   = ""
    port     = 1433
    user     = ""
    password = ""
    database = ""
)

// TestInsertDt
func TestInsertDt(db *sql.DB, dt time.Time) error {
    tsql := "INSERT INTO dbo.Test2021 (dt) VALUES (?)"
    if _, err := db.Exec(tsql, dt); err != nil {
        panic(err)
    }
    return nil
}

// TestInsertDt
func TestInsertDt2(db *sql.DB, dt time.Time) error {
    tx, err := db.Begin()
    if err != nil {
        panic(err)
    }
    stmt, err := tx.Prepare(mssql.CopyIn("Test2021", mssql.BulkOptions{}, "dt"))
    if err != nil {
        tx.Rollback()
        panic(err)
    }
    if _, err = stmt.Exec(dt); err != nil {
        panic(err)
    }
    if _, err = stmt.Exec(); err != nil {
        panic(err)
    }
    tx.Commit()
    stmt.Close()
    return nil
}

func main() {
    // Connect to database
    connString := fmt.Sprintf("server=%s;user id=%s;password=%s;port=%d;database=%s;",
        server, user, password, port, database)
    conn, err := sql.Open("mssql", connString)
    if err != nil {
        log.Fatal("Open connection failed:", err.Error())
    }
    fmt.Printf("Connected!\n")
    defer conn.Close()

    layout := "2006-01-02 15:04:05.000"
    t, err := time.Parse(layout, "2021-08-01 00:05:10.303")
    if err != nil {
        panic(err)
    }
    TestInsertDt(conn, t)
    TestInsertDt2(conn, t)
}

actual result: image

expected result: TestInsertDt and TestInsertDt2 both insert "2021-08-01 00:05:10.303"

SQL Server version

Microsoft SQL Server 2019 (RTM-GDR) (KB4583458) - 15.0.2080.9 (X64) Nov 6 2020 16:50:01 Copyright (C) 2019 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2019 Standard 10.0 (Build 17763: ) (Hypervisor)