2012-06-06 3 views
2

Я пытаюсь выполнить сравнение данных таблицы базы данных SQLServer до и после некоторого действия. Я сохраняю первые данные в файле (фактически я сохраняю MD5 данных, но не релевантно), поэтому я могу сравнить новые данные с ним после действия. Первой проблемой является то, что данные, возвращаемые запросом, не всегда находятся в одном порядке.заказать по первичному ключу

Чтобы решить эту проблему, я подумал об использовании предложения ORDER BY для заказа данных. Здесь вторая проблема. Я выполняю запрос, определенный пользователем, поэтому запрос и таблица могут быть разными.

Итак, вот вопрос: Как я могу ЗАРАБОТАТЬ PRIMARY_KEY (один или несколько) без предварительного знания того, какая таблица будет использоваться?

Любое другое решение будет также приветствоваться,

Спасибо за ваше время и усилия,

ответ

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 независимо от названия столбца. Это будет работать на ПК, если у вас есть основной ключ в первом столбце таблицы

+0

спасибо, но я стараюсь сделать самое гибкое решение для разных версий, и да, мне нужно заказать по первичному ключу, для вашего решения мне нужно будет знать ранее номер столбцов в таблице. Спасибо в любом случае ...;) – magodiez

Смежные вопросы