2011-12-27 9 views
1

지난 달 동안의 횟수 쿼리에서 반환 된 모든 열에 'null'필드를 '0'으로 대체해야했습니다. 기본적으로isnull을 모든 컬럼에 적용하는 더 좋은 방법이 있습니까?

select  ', isnull(' + COLUMN_NAME + ', 0)' + ' as ' + COLUMN_NAME 
from  INFORMATION_SCHEMA.COLUMNS 
where  TABLE_NAME = 'summary_by_scca_sales_category ' 
      and TABLE_SCHEMA = 'property'' 

:

는 (이들 중 일부는 열을 높은 숫자를 반환하는) 나는 다음 다음 새 쿼리에 해당 열에 대한 결과를 붙여 사용하고 많은 시간을 저장합니다 내가 할 수있는 더 좋은 방법이 있는지 궁금하네요? 이상적인 방법은 두 개의 쿼리를 사용하지 않고 쿼리에서 반환되는 모든 열에 isnull을 자동으로 적용 할 수있는 방법입니다.

예를 들어

:

내가 같은 쿼리 먹고 싶어 :

select * 
from tablename 

을 그리고 *에 의해 반환 된 모든 컬럼에 대해 각 열에 대한 ISNULL() 라인을 작성하지 않고도 0으로 널 (null) 결과를 교체 .

편집는 :

은 뷰 (DOH, 그 생각해야)와 함께이 작업을 수행 할 것이다. 관심사/교육을 위해서도 이와 같은 코드를 사용하는 방법이 있습니까?

+3

는'경우 null' _should_ 실제로'데이터의 0' 수 : 유형의 문제에주의 (당신은 모든 그래서 모든 열이 적당한 숫자 유형입니다 가정 0 버리는한다 진술) 테이블을'null'을'0'으로 대체하고 not-null 컬럼을'0'의 기본값으로 만드시겠습니까? 그러면 모든 '선택'에서 확인하지 않아도됩니다. – David

+0

나는 그것을 좋아하지 만 그것을 강요했지만 불행하게도 나는 그렇게 할 수있는 위치에 있지도 않았고 그렇게 할 수 없었습니다. (dba는 여러 다른 시스템에 관련된 회귀 테스트가 – Codingo

+1

숫자 필드 유형에 대해서만 의미가 있습니다. 스크립트로 생성 한 뷰를 생성하지 않으려면 null 처리 결과를 원하면 view_tablename에서 select *를 수행하십시오. – rene

답변

7

ISNULL 논리를 설정하려는 해당 테이블에 대해 VIEW을 만들 수 있습니다. 그런 다음 뷰에 대한 쿼리는 원하는 데이터를 반환합니다.

EDIT :

요청한 바와 같이, 샘플 코드를 자동으로 생성 VIEW들 달성하기. 이것은 꽤 총체적이지만 일단 작동해야만하는 경우에 효과적입니다. 방금 업데이트 할 수

DECLARE @table_def varchar(max) 
SET @table_def = 'CREATE VIEW <tname>_NoNull AS SELECT ' 

SELECT @table_def = REPLACE(@table_def, '<tname>', t.name) + 
    'ISNULL(' + c.name + ', 0) AS ' + c.name + ', ' 
FROM sys.tables t 
    INNER JOIN sys.columns c ON t.object_id = c.object_id 
WHERE t.name = <<table name>> 

SELECT @table_def 
+1

아주 좋은 점, 왜 내가 그것을 고려하지 않았는지 모르겠다. 관심/교육을 위해 코드를 사용하여이 작업을 수행 할 수있는 방법이 있습니까? – Codingo

+2

거기에 - 당신은 위와 비슷한 로직을 사용할 수 있으며 CREATE VIEW 문을 동적으로 생성하고 실행할 수 있습니다. – mwigdahl

+2

@Codingo : 아마 _good_ 방법 일 것입니다. 'VIEW'는 의미 론적으로 그리고 직관적으로 당신이 찾고있는 가장 가까운 것입니다. 특별한 고려 사항이있는 테이블의 뷰. – David

관련 문제