我有一個表是外部id和本地id之間的映射。任何或如果存在T-SQL
我不得不寫一個查詢來確定這個表是否是雙射。我想出了這個
IF 1 <> ANY(
SELECT COUNT(foreignId)
FROM mappingTable
GROUP BY localId
)
BEGIN
SELECT 'Oh noes!'
END
ELSE BEGIN
SELECT 'Everything is fine.'
END
我的導師看了一眼這一點,做了個鬼臉,並告訴我,我應該寫這個:
IF EXISTS(
SELECT NULL
FROM mappingTable
GROUP BY localId
HAVING COUNT(foreignId) <> 1
)
BEGIN
SELECT 'Oh noes!'
END
ELSE BEGIN
SELECT 'Everything is fine.'
END
我的問題很簡單這些疑問的是更好的風格。我很確定它們是相同的。
爲什麼上不了檯面採用了獨特的約束:無指標
查詢計劃?像UNIQUE(localId,foreignId)一樣,每個映射只能被抹黑一次。該檢查由數據庫引擎完成,您不必編寫任何代碼。 –
@ JennyO'Reilly我試圖檢查從外部收到的數據的完整性。 –
然後先創建表和約束,然後嘗試插入數據。如果數據不正確,您的數據庫系統應該會報錯。 :-) –