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을 사용하고 있습니다.

내가 사용하는 코드는 다음과 같습니다 테이블 중 일부는 EXCEPT 작동하지 않습니다 열 유형을 포함

(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) 

. 따라서 해당 열을 선택하고 싶지 않습니다. 내가 information_schema.columns에서이 정보를 얻을 수 있지만 거기에 "*"대신 위 예제에서 사용할 수있는 좋은 방법이 있습니까?

감사합니다.

+1

좋은 질문 또는 설명을 제공하십시오. 이것은 매우 혼란 스럽습니다. – Anvesh

+0

더 나은 @Anu? – 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

이것은 트릭을 만들었습니다. 두 개의 db 이름과 테이블 이름을 사용하여 불일치를 모두 반환하는 저장 프로 시저를 만드는 데이 방법을 사용했습니다. – user2323503