簡體   English   中英

有關從MS Access使用SQL Server GUID的建議

[英]Recommendations on using SQL Server GUID from MS Access

我正在將現有的MS Access后端升級到SQL Server 2008,因為我們想要使用SQL Server Merge復制 ,所以我必須將所有當前主鍵(當前標准自動增量整數)更改為GUID。

所以這里是問題:

  • 關於將主鍵從整數更改為GUID的任何建議?
  • 有關從Access客戶端中的代碼使用和操作GUID的任何建議嗎?
  • 我應該使用哪種SQL Server GUID類型?

Chris說的是(1)您不需要GUIDS進行合並復制,(2)只有一種GUID類型,但您必須知道:

  1. 可以按照不同的規則生成GUIDS。 你可以在這里查看
  2. 在設置復制時,SQL會系統地將GUID(生成為newsequentialid)添加到每個表(如果它尚不存在),並將其rowguid 當然,如果每個表中已經有這樣的GUID / newSequentialId,SQL將使用它。 BUt我不建議你將復制GUID與PK GUID'混合':你可以將GUID類型的所有主鍵聲明為'newSequentialIds',但是(a)你將失去在客戶端生成GUID值的可能性 - 見下文 - 和(b)你的PK將是“可預測的”,這個想法讓我感到不舒服......
  3. 保持自動增量整數並通過復制管理其范圍意味着大量開銷(您必須為每個表/每個發布分配范圍)以及從不同來源復制時潛在的沖突源。
  4. 此外,像一些SQL錯誤這一個 ,這是專門針對范圍分配,仍然沒有妥善解決:將累積包5未解決我們的問題,我們必須找到另一種方法重新啟動我們的復制過程。
  5. 無論如何,我深信,從整數切換到GUID作為主鍵是強制性的。 造成這種情況的原因有很多,其中一個原因與這些范圍管理有關,因為它們是頭痛和隔夜麻煩會議的潛在來源。

關於從整數到GUIDS的更改,我建議您編寫一個分步模塊,該模塊將:

  • 在修改之前備份所有現有表
  • 向每個表添加GUID字段
  • 在請求時添加相應的FK字段
  • 通過使用現有關系構建的視圖更新FK字段(基於整數字段構建)
  • 打破關系
  • 將PK從整數字段更改為GUID字段
  • 重建關系

花點時間編寫這段代碼。 在正常工作之前,您將多次使用它。 您應該從DAO對象,tabledef,索引等中獲利。 請記住,您必須始終能夠返回起點,因此不要忘記初始備份過程。

那么從VBA操縱GUID呢? 有一些事情需要了解:

  • GUID是Variant類型
  • 可以並且很容易在應用程序的客戶端生成GUID作為主鍵,正如我在此處提出的那樣。
  • 當您嘗試從表單中的控件獲取GUID值(通常作為組合框中的鏈接字段)時,您將獲得“?????”但沒有值。 您必須引用記錄集中的字段值才能獲得正確的數據。 您可以在應用中打開此類表單,轉到“即時”窗口,然后嘗試以下操作:

? myForm.myControl
?????

? myForm.recordset.fields("myFieldName")
{000581EB-9CBF-418C-A2D9-5A7141A686CC}
  • 在使用記錄集(例如recordset.findfirst)瀏覽記錄集時,可能必須將guid轉換為字符串:

myFirstRecordset.FindFirst "stringFromGUID(myGuidId) = " & StringFromGUID(mySecondRecordset.Fields("myGuidId").Value)

這可能略微偏離主題。 但是,您不必使用GUID進行合並復制。 您仍然可以使用自動增量整數並將不同的范圍分配給不同的數據庫實例。 這樣,將不會生成具有相同ID的行。

此外,SQL 2008中只有一個GUID類型字段 - uniqueidentifier

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM