2012-06-06 140 views
2

我正在嘗試在某個操作之前和之後對SQLServer數據庫的表的數據進行比較。 我將第一個數據保存在一個文件中(實際上我保存了數據的MD5,但不相關),因此我可以在操作之後將新數據與它進行比較。 第一個問題是查詢返回的數據不總是以相同的順序排列。按主鍵排序

所以要解決這個問題,我想過使用ORDER BY子句來排序數據。 這是第二個問題。我正在執行用戶定義的查詢,因此查詢和表可能會有所不同。

所以,這裏是一個問題:如何在沒有事先知道使用哪個表的情況下對PRIMARY_KEY(一個或多個)進行ORDER BY?

任何其他解決方案也將受到歡迎,

感謝您的時間和精力,

回答

3

您可以使用動態SQL查詢的元表,發現主鍵是什麼

SELECT column_name 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
WHERE OBJECTPROPERTY(OBJECT_ID(constraint_name), 'IsPrimaryKey') = 1 
AND table_name = 'Person' 

隨着動態SQL您構建您的SQL語句像一個字符串,並將其交給sp_executeSQL

更多信息在http://msdn.microsoft.com/en-us/library/ms188001.aspx

+0

不錯! 工作完美,謝謝...;) – magodiez

0

我試圖在執行一些操作之前和之後對SQLServer數據庫的表的數據進行比較。

如果使用的是SQL Server 2008中,你可以使用CDC

你真的需要通過主鍵訂購?如果沒有,你可以做

ORDER BY 1, 2, 3 

這將按列1,2和3排序,無論列的名稱。 如果你在表格的第一列有你的主鍵,這將工作在PK上

+0

謝謝,但我嘗試做不同版本的最靈活的解決方案,是的,我需要通過主鍵訂購,爲您的解決方案,我需要先前知道的數字表中的列。 不管怎麼說......;) – magodiez