이 테이블에는 4 천만 개의 행이 있고 쿼리에는 영원히 걸리는 점을 제외하고 아래와 같이 alter 명령을 실행하려고합니다. 수백만 개의 행이 기본값으로 설정된 테이블 변경
ALTER TABLE [dbo].[ConsumerProduct]
ADD IsPendDefault [bit] NOT NULL DEFAULT ((0))
GO
는 그러므로 나는 5000의 일괄 40000000 행에 대한 모든 열을 갱신하지 않고,이 null로 변경하고 생각하고보다 것은 다시 null가 아닌로 다시 변경합니다. 이
ALTER TABLE [dbo].ConsumerProduct
ADD IsPendDefault [bit] NULL
GO
SET ROWCOUNT 10000
WHILE (1=1)
BEGIN
BEGIN TRANSACTION
UPDATE ConsumerProduct
SET IsPendDefault = 0
WHERE IsPendDefault IS NULL
-- Update 1000 nonupdated rows
IF @@ROWCOUNT = 0
BEGIN
COMMIT TRANSACTION
BREAK
END
COMMIT TRANSACTION
END
ALTER TABLE [dbo].ConsumerProduct
ALTER COLUMN IsPendDefault [bit] NOT NULL
GO
에도이 쿼리 같은
뭔가 영원히합니다. 열의 기본값을 사용하여 테이블을 변경하는 더 쉬운 방법이 있습니까?
내가 SQL 서버의 엔터프라이즈 버전에서 SQL 서버 2012
나는 update where 절에서 기본 키를 사용하고 일괄 처리로 업데이트합니다. 각 일괄 처리를 독립 실행 형 구문으로 만들고 루프에 의존하지 않을 것입니다. 다음 10 만 가지 범위의 성명을 얻으십시오. –