2012-02-06 5 views
9

DB에 약 12,000 개의 항목을 업데이트해야하는 상황에 처해 있습니다. 각 행은 이전에 만든 Excel 파일을 미러링해야합니다. 각 줄의 SQL 문을 만드는 파일을 만들었지 만 각 줄을 단일 쿼리로 실행할 수 있는지는 잘 모르겠습니다.단일 쿼리로 여러 SQL 업데이트 문

이것은 내가하려는 일의 예입니다. 내가 달성하기 위해 노력하고 무엇을위한 더 나은 옵션이

UPDATE [STORESQL].[dbo].[RPT_ITM_D] SET F1301='1.29' WHERE F01='0000000000001' 
UPDATE [STORESQL].[dbo].[RPT_ITM_D] SET F1301='1.39' WHERE F01='0000000000002' 

이 일을 윌, 또는이 있습니까?

각 항목은 고유 한 값을 가지며 변경 될 열도 고유 한 값을 갖습니다. 루프 나 다른 방법으로이 작업을 수행하는 방법을 알 수 없습니다. 이 작업을 처리하는 데 시간이 오래 걸릴 수도 있지만 시간은 문제가되지 않습니다.

이 같은

답변

8

예, 모든 단일 행 업데이트 문을 한 쿼리에 추가 할 수 있습니다.

16

뭔가 당신이 할 수있는 최선 사전에 감사합니다 -보다

UPDATE [STORESQL].[dbo].[RPT_ITM_D] 
SET F1301 = 
     case F01 
     when '0000000000001' then '1.29' 
     when '0000000000002' then '1.30' 
end 

기타, 여러 업데이트를 실행하면 갈 수있는 방법입니다.

+3

그는 12,000 개의 고유 값을 업데이트하려고합니다. 여기서는 Case가 유효한 옵션이라고 생각하지 않습니다. –

+0

@BassamMehanni 이해합니다. 나는 단지 # case를 사용하여 업데이트 문장의 수를 줄이는 것만 큼 그가 할 수있는 최선이라고 지적했다. – Icarus

1

상당량의 데이터를 업데이트하려면 Excel 파일을 테이블로 데이터베이스에로드 한 다음이로드 된 테이블의 데이터를 기반으로 테이블을 업데이트하는 것이 좋습니다.

UPDATE RPT_ITM_D 
     SET F1301 = NewTable.Value 
    FROM RPT_ITM_D INNER JOIN NewTable ON (NewTable.F01 = RPT_ITEM_D.F01); 

SQL 서버를 사용하는 경우 SSIS를 사용하여 파일을 매우 빠르게로드 할 수 있습니다.

2

SQL 데이터베이스의 테이블에 Excel 시트를 가져 오는 것이 가장 좋은 방법이라고 생각합니다. 여기에서 조인을 사용하여 12,000 개의 모든 항목에 대해 단일 업데이트 문을 만들 수 있습니다.

SQL에 엑셀 시트를 가져 오는 방법에 대한 자세한 내용은

: http://msdn.microsoft.com/en-us/library/ms141209.aspx

업데이트 문은 다음과 같은 것이 보일 것이다 :이 안전하게 작업 할 경우

UPDATE itemTable 
SET F1301 = excelTable.<column with your value> 
FROM [STORESQL].[dbo].[RPT_ITM_D] itemTable inner join [STORESQL].[dbo].[importedExcelTableName] excelTable on itemTable.F01 = excelTable.<column with the item code> 

당신이 확실하지 않은 경우를, 당신 추가 간단하여 단일 값이 쿼리를 시도 할 수 있습니다 :

WHERE itemTable.F01 = '0000000000001' 
2

MERGE 예에서 살펴 보자 뭔가 같은 :

MERGE INTO [STORESQL].[dbo].[RPT_ITM_D] 
    USING (
      VALUES ('1.29', '0000000000001'), 
       ('1.39', '0000000000002') 
     ) AS source (F1301, F01) 
    ON F01 = source.F01 
WHEN MATCHED THEN 
    UPDATE 
     SET F1301 = source.F1301; 

...하지만 이런 식으로 테이블 값 생성자를 사용하여 12,000 행으로 확장되지 것입니다! 먼저 Excel의 데이터를 서버의 테이블로 복사 한 다음 소스로 테이블을 사용하십시오.

MERGE INTO [STORESQL].[dbo].[RPT_ITM_D] 
    USING [STORESQL].[dbo].MyStagingTable AS source 
     ON F01 = source.F01 
WHEN MATCHED THEN 
    UPDATE 
     SET F1301 = source.F1301; 
0

쿼리의 구도를 Excel에서 CONCATENATE 기능을 사용할 수 있습니다, 당신이해야 할 모든 ("업데이트 = 설정"나머지

CONCATENATE 위해 동일을 하나의 업데이트 쿼리의 구도를 드래그하는 것입니다 ";")

위의 형식을 사용하고 업데이트 문 자동 채우기 오른쪽 아래 모서리에있는 말 또는 더블 클릭까지 셀을 드래그 ,, ,, "여기서 는 =". 나는 이것이 가능한 한 최단의 방법임을 믿으며 하나의 Go에서 그것을 실행합니다.

관련 문제