2013-04-29 2 views
1

Я использую SQL Server 2005 и должен написать инструкцию select, которая выбирает все строки в таблице, но только для столбцов определенных типов. В моем случае я хочу, чтобы все столбцы, кроме столбцов типа xml, text, ntext, image или nonbinary CLR, определялись пользователем.Выделить все строки таблицы

В этом вопрос. Если вы хотите знать, почему я это делаю, читайте дальше. Я использую EXCEPT, чтобы определить различия между каждой таблицей в двух базах данных, аналогичные тому, что описано в этом вопросе: SQL compare data from two tables. Я не понимаю, почему в комментарии было предложено INTERSECT, поэтому вместо этого я использую UNION ALL.

кода я использую:

(select *, 'table a first' as where_missing from A EXCEPT select *,'table a first' as where_missing from B) 
union all 
(select *,'table b first' as where_missing from B EXCEPT select *, 'table b first' as where_missing from A) 

Некоторые из таблиц содержат столбцы типов, которые не работают с EXCEPT. Поэтому я не хочу выбирать эти столбцы. Я могу получить эту информацию из information_schema.columns, но есть ли хороший способ, который я могу использовать в моем примере выше вместо «*»?

Спасибо!

+1

пожалуйста обеспечивают хороший вопрос или объяснение. это довольно запутанно. – Anvesh

+0

все лучше @ Ану? – user2323503

ответ

0

Я не думаю, что есть способ сделать это, кроме использования динамического SQL. Сначала выберите столбцы:

declare @columns nvarchar(max); 
select @columns = stuff( 
    (select ', ' + c.name 
    from sys.tables t 
    join sys.columns c on t.object_id = c.object_id 
    join sys.types ty on c.system_type_id = ty.system_type_id 
    where t.name = 'A' 
    and ty.name not in ('text', 'ntext', 'xml', 'image') 
    for xml path('')) 
, 1, 2, ''); 

Затем выполнить запрос:

declare @sql nvarchar(max); 
set @sql = 'select ' + @columns + ', ''table a first'' as where_missing from A'; 
exec (@sql); 
+0

Это сделало трюк. Я использовал это для создания хранимого proc, который принимает два имени db и имя таблицы и возвращает все несоответствия. – user2323503

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