2

我正在尝试在某些操作之前和之后对 SQLServer 数据库表的数据进行比较。我将第一个数据保存在文件中(实际上我保存了数据的 MD5,但不相关),因此我可以在操作后将新数据与其进行比较。第一个问题是查询返回的数据并不总是相同的顺序。

所以为了解决这个问题,我想到了使用 ORDER BY 子句对数据进行排序。第二个问题来了。我正在执行用户定义的查询,因此查询和表可能不同。

所以这里有一个问题:如果事先不知道将使用哪个表,我如何按 PRIMARY_KEY(一个或多个)排序?

任何其他解决方案也将受到欢迎,

感谢您的时间和精力,

4

2 回答 2

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

于 2012-06-06T10:53:44.067 回答
0

我正在尝试在某些操作之前和之后对 SQLServer 数据库表的数据进行比较。

如果您使用的是 SQL Server 2008,则可以使用CDC

你真的需要按主键排序吗?如果没有,你可以做

ORDER BY 1, 2, 3

无论列的名称如何,都将按列 1、2 和 3 排序。如果您的主键位于表的第一列,这将适用于 PK

于 2012-06-06T11:12:02.457 回答