【问题标题】:Inserting into SQL Server table with GUID pk from MS Access从 MS Access 插入带有 GUID pk 的 SQL Server 表
【发布时间】:2017-02-20 18:03:20
【问题描述】:

我正在将我们的数据库从 Access 后端移动到 SQL Server 后端,同时保留 Access 前端。其中一张表设置了其 PK 的复制 ID。作为一个访问数据库,我们可以在不引用 PK 字段的情况下将值插入到该表中,因为 Access 会自动生成一个新的 GUID。

我们有一个函数可以构建一条记录以插入到该表中,该函数不再适用于该表的链接 SQL Server 版本,我很确定它一定与这个 replcationID 字段有关。在 SQL Server 中,它作为数据类型“唯一标识符”导入。当函数运行时,它不会返回任何错误,但也不会插入任何内容。

我想知道是否有一种方法可以在不将其更改为直通的情况下使其正常工作。如何让 MS Access 在插入新记录时告诉 SQL Server 生成新的 GUID。

附带说明,PK 字段称为 PurchaseID,当前在 vba 中未引用(因为它曾经为该字段自动生成)

Public Sub BuildReorderRecord(Market As String, MPID As String, FloorsetID As String)
Dim values As String
Dim sql As String
Dim P3ID As String
Dim Username As String
Dim dt As String
Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT ID FROM tblAttributes WHERE MPID = """ & MPID & """")

    'Get P3ID and auditing values
    dt = Now()
    Username = Environ("USERNAME")
    P3ID = rs![ID]

    'build record values string
    values = """" & P3ID & """, """ & Market & """, """ & MPID & "', """ & FloorsetID & """"
    values = values & ", #" & dt & "#, """ & Username & """, #" & dt & "#, """ & Username & """"

    'build sql string
    sql = "INSERT INTO tblReorders (P3ID, country, mpid, floorsetID"
    sql = sql & ", CreateDate, CreatorUsername, ChangeRecord_Timestamp, ChangeRecord_Username)" & vbNewLine
    sql = sql & "VALUES(" & values & ")"

    'insert the new record
    db.Execute sql

Set db = Nothing
Set rs = Nothing

结束子

【问题讨论】:

  • 我尝试在 sql 字符串中使用 newid(),但是当 access 运行 db.execute 语句时,我得到一个错误:“Undefined function 'newid' in expression.

标签: sql-server vba ms-access


【解决方案1】:

您可以在 sql server 中为该列在表上添加默认约束,如下所示:

alter table t 
  add constraint [df_t_guid]
    default newid() for [guid];

或者您可以在访问中使用自定义函数来生成像 stguidgen() 这样的 guid

insert into ... (guid...
values (stguidgen(), ...)

通过传递查询,您可以使用newid(),它会在sql server 中生成一个新的uniqueidentifier

insert into ... (guid...
values (newid(), ...)

【讨论】:

  • 添加表约束对我来说效果很好。谢谢大家的建议!
  • @ArcherBird 乐于助人!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 2019-02-11
相关资源
最近更新 更多