2011-04-01 9 views
1

행에있는 열의 하위 집합에 대한 값을 기본 값 (여기서 정의 된 값)으로 재설정하거나 null로 설정하는 SQL 문 또는 저장 프로 시저를 찾고 있습니다. 행에 다른 열이 있습니다. 재설정하지 않으려면 행을 삭제하고 다양한 기본값으로 초기화되는 새 행을 만들면됩니다. 원하는 효과는 있지만 열의 특정 부분 집합.SQL에서 열의 하위 집합을 기본값으로 재설정 하시겠습니까?

개념적으로, 나는

UPDATE eirProj 
SET <all columns named like 'paf%'> TO THEIR DEFAULT OR NULL 
WHERE [email protected] 

또는 적어도

UPDATE eirProj 
SET pafAuth=<pafAuth default or NULL>, pafComp=<pafComp default or NULL>, paf... 
WHERE [email protected] 

나는 (두 곳에 중복 테이블 정의를 디폴트 값을 하드 코딩하지 않도록하기 위해 노력하고있어이 찾고 있어요 재설정 코드). 이상적이지만 비판적으로 열 이름을 하드 코딩하지 않으려 고하므로 열을 추가, 삭제 또는 이름을 바꾸어 하위 집합이 변경된 경우에도 여전히 작동합니다.

SQL Server에서 작업 중이며 T-SQL 관련 솔루션 만 사용할 수 있습니다.

답변

8

당신은 default 키워드를

CREATE TABLE dbo.eirProj 
    (
    paf1 INT DEFAULT(100), 
    paf2 INT NULL 
) 

INSERT INTO dbo.eirProj 
VALUES  (1, 
      1) 

UPDATE dbo.eirProj 
SET paf1 = DEFAULT, 
     paf2 = DEFAULT 

SELECT * 
FROM dbo.eirProj 

반환

paf1  paf2 
----------- ----------- 
100   NULL 

위를 생성하는 동적 SQL을 사용하지 않는 paf%라고 모든 열에 대해이를 수행하는 방법은 없습니다를 사용할 수 있습니다.

DECLARE @Script NVARCHAR(MAX) 

SELECT @Script = ISNULL(@Script + ',', '') + QUOTENAME(name) + ' =default' 
FROM sys.columns 
WHERE object_id = object_id('dbo.eirProj') 
     AND name LIKE '%paf%' 

IF (@@ROWCOUNT = 0) 
    RETURN 

SET @Script = 'UPDATE dbo.eirProj SET ' + @Script 

EXEC(@Script) 
+0

아! 너무 간단! 필자는 필자가 복제 작업을 복잡하게하고있는 것 같았습니다 ... 동적 SQL이 열 선택을 자동화하는 유일한 방법임을 확인해 주셔서 감사드립니다. – GISmatters

+0

방금 ​​작성한 스크립트보다 조금 더 강력한 추가 스크립트를 보내 주셔서 감사합니다. 건배. – GISmatters

관련 문제