2013-10-02 78 views
1

我有一個查詢,我使用每天晚上從幾個不同的表中拉出數據,這個拉進入一個upsert表,它被加載到我們的雲服務器。我試圖爲每一行設置一些獨特的標識符/主鍵,但我遇到了問題。用NEWID創建一個主鍵()

SELECT SUBSTRING(CAST(NEWID() AS varchar(38)), 1, 16)

每當我重新運行查詢,它改變每次NEWID()的價值,所以它裝載到副本我的表每天晚上,而不是更新的記錄。無論如何,我可以保持newid()每次運行查詢時的靜態值?

感謝, 雷切爾

+0

對不起,我不明白你的意思。你是說你插入多個表,但想要爲每個表使用相同的uniqueindetifier? – Fred

+0

我從多個表中拉出來插入到一個特定的插入表中。我想要一個唯一的ID爲upsert表,但我沒有真正好的方法來唯一標識每一行。 – user2839262

回答

2

NEWID()是由設計獨特返回(在計算機上)GUID值。無論何時運行

SELECT NEWID() 

您將看到不同的值。

聽起來你的UPSERT代碼需要將源表中的數據合併到一個主鍵中,以便將來可靠地使用它來確定是否需要插入或更新給定的行。

+1

謝謝你的解釋! – user2839262

0

NEWID()每次調用時都會返回一個唯一值。這不是主鍵的最佳選擇,並且大多數數據專家在可能的情況下使用集羣主鍵的int標識。

在你的情況下,由於身份和NEWID()都返回新值,所以這兩種解決方案都無法完美工作。你需要做的是找出哪些列確定一行是否是重複的,需要更新而不是插入。爲此,請使用merge聲明。

+0

謝謝你的解釋! – user2839262