Sql-Server

從 PostgreSQL 遷移到 SQL Server

  • September 4, 2015

我的任務是將數據庫從 PostgreSQL 9 遷移到 SQL Server 2008 R2,我發現了一些需要解決的問題。恐怕我對 PostgreSQL 的經驗非常有限。

  1. 大多數鍵是 BigInt。在 PostgreSQL 中,呼叫一個函式來獲取下一個 ID,無論出於何種原因,這都是在程式碼中提前完成的。這可以在 SQL Server 中以相同的方式完成,還是我被迫創建一個鍵索引表來跟踪目前 ID。IDENTITY(1,1)afaik 將在插入時提供一個新 ID。
  2. 有一些儲存過程NEWTRIGGER. SQL Server 語言中的等價物是什麼?
  3. 考慮到 PostgreSQL 觸發器是基於行的,觸發器有什麼不同?
  1. 您可以使用SEQUENCE創建密鑰。每次您需要序列中的新 ID 時,您只需發出SELECT NEXT VALUE FOR SomeSequence;. 不幸的是,並非所有版本的 SQL Server 都支持序列(2012 及更高版本),因此如果您堅持使用 SQL Server 2008 R2,您將不得不自己編寫程式碼。

有關範例,請參見Paul White序列表。 2. 據我所知,NEWBEFORE觸發器返回意味著最初觸發觸發器的INSERTorUPDATE操作將發生。觸發函式可能會改變它的列值。有關描述和範例,請查看文件

您可以在 SQL Server 中使用正常 DML 語句(例如 UPDATE 和 INSERT)實現相同的目的,將目標表與邏輯表 INSERTED 和 DELETED 連接起來。您還可以決定使用INSTEAD OF 觸發器代表原始語句實現操作。 3. Postgres 中的觸發器是基於行的或基於語句的。轉換FOR EACH ROW為插入/刪除的連接只是使用正確的鍵來關聯表的問題。

引用自:https://dba.stackexchange.com/questions/114188