Sql-Server
從 PostgreSQL 遷移到 SQL Server
我的任務是將數據庫從 PostgreSQL 9 遷移到 SQL Server 2008 R2,我發現了一些需要解決的問題。恐怕我對 PostgreSQL 的經驗非常有限。
- 大多數鍵是 BigInt。在 PostgreSQL 中,呼叫一個函式來獲取下一個 ID,無論出於何種原因,這都是在程式碼中提前完成的。這可以在 SQL Server 中以相同的方式完成,還是我被迫創建一個鍵索引表來跟踪目前 ID。
IDENTITY(1,1)
afaik 將在插入時提供一個新 ID。- 有一些儲存過程
NEW
以TRIGGER
. SQL Server 語言中的等價物是什麼?- 考慮到 PostgreSQL 觸發器是基於行的,觸發器有什麼不同?
- 您可以使用SEQUENCE創建密鑰。每次您需要序列中的新 ID 時,您只需發出
SELECT NEXT VALUE FOR SomeSequence;
. 不幸的是,並非所有版本的 SQL Server 都支持序列(2012 及更高版本),因此如果您堅持使用 SQL Server 2008 R2,您將不得不自己編寫程式碼。有關範例,請參見Paul White的序列表。 2. 據我所知,
NEW
從BEFORE
觸發器返回意味著最初觸發觸發器的INSERT
orUPDATE
操作將發生。觸發函式可能會改變它的列值。有關描述和範例,請查看文件。您可以在 SQL Server 中使用正常 DML 語句(例如 UPDATE 和 INSERT)實現相同的目的,將目標表與邏輯表 INSERTED 和 DELETED 連接起來。您還可以決定使用INSTEAD OF 觸發器代表原始語句實現操作。 3. Postgres 中的觸發器是基於行的或基於語句的。轉換
FOR EACH ROW
為插入/刪除的連接只是使用正確的鍵來關聯表的問題。