2014-10-31 4 views
0

나는 조금 붙어 있습니다 ... 나는 쿼리의 결과를 하나의 기준에 따라 여러 파일로 나누려고합니다. varchar 형식을 int로 변환하는 중 오류가 발생하며 이유를 파악할 수 없습니다. ... SQL Server 2008의단일 쿼리에서 여러 파일로 출력

DECLARE @LOOP AS INT; 
DECLARE @SQL AS VARCHAR(MAX); 
DECLARE @BCP AS VARCHAR(MAX); 
DECLARE @COUNTER AS INT; 
DECLARE @FILENAME AS VARCHAR(MAX); 

SET @COUNTER='1' 

SELECT @LOOP = COUNT(DISTINCT LIST_ID) FROM DATA_TABLE 
WHERE STATUS='2' AND LIST_ID IS NOT NULL ; 

SET @SQL=(SELECT CUSTOMER_NO FROM CUSTOMER A, DATA_TABLE B 
WHERE A.CUSTOMER_ID=B.CUSTOMER_ID AND A.STATUS='2' AND LIST_ID='[email protected]+'); 

SET @FILENAME='QUERYOUT C:\Projects\FILE_"'[email protected]+'.TXT' 

WHILE @COUNTER<[email protected] 
BEGIN 
SELECT 
@BCP='BCP "'[email protected]+'+'[email protected]+'' 
SET @[email protected]+1 
END 
GO 

내가 점점 오전 오류를 작업입니다 : 내가 나를 각 파일의 내용을 알려 루프 값을 사용하려고

Msg 245, Level 16, State 1, Line 10 
Conversion failed when converting the varchar value '[email protected]+' to data type int. 

. 예를 들어, LOOP = '1'은 LIST_ID = '1'과 연관된 고객 레코드가 파일에 있음을 의미합니다.

오류가 발생 했습니까?

+0

SET @ FILENAME = 'QUERYOUT C : \ Projects \ FILE_ "'+ CAST (@LOOP AS VARCHAR) + 'TXT' – DMason

답변

0

정확히 무엇이 필요한지 잘 모르겠지만 모든 LIST_ID에 대해 BCP 명령을 실행하려면 각 루프마다 루프를 실행해야합니다.

이것은 내가 필요로하는 것보다는 오히려 내가 집에 돌아올 때까지 기다리는 것이 아니라 지금 게시 할 것입니다. 기본적으로는 마스터 DB를 가리 때문에

DECLARE @FILENAME AS VARCHAR(MAX); 
DECLARE @LISTID INT 
DECLARE @LOOP AS INT; 
DECLARE @BCP AS VARCHAR(MAX); 
DECLARE @SQL AS VARCHAR(MAX); 

DECLARE cur CURSOR FOR SELECT DISTINCT LIST_ID FROM DATA_TABLE WHERE STATUS='2' AND LIST_ID IS NOT NULL 
OPEN cur 

FETCH NEXT FROM cur INTO @LISTID 

WHILE @@FETCH_STATUS = 0 BEGIN 
    SET @FILENAME='QUERYOUT C:\Projects\FILE_'+Cast(@LISTID AS Varchar)+'.TXT -c -t -T' 
    SET @SQL='(SELECT CUSTOMER_NO FROM CUSTOMER A, DATA_TABLE B WHERE A.CUSTOMER_ID=B.CUSTOMER_ID AND A.STATUS=''2'' AND LIST_ID='[email protected]+')'; 
    SELECT @BCP='BCP '[email protected]+' '[email protected]+'' 
    EXEC xp_cmdshell @BCP 
    FETCH NEXT FROM cur INTO @LISTID 
END 

CLOSE cur  
DEALLOCATE cur 
0

1.change의 VARCHAR (최대)은 모든 테이블 (8000)
2.Add DBNAME.SCHEMA을 VARCHAR합니다. "FILENAME @
3. 아래 = 'QUERYOUT C : 프로젝트 \ \ FILE _
추가 따옴표()' '. + 캐스트 (대 Varchar AS @LISTID) +'TXT " -c -t - T '
4'("고객 A로부터 SELECT CUSTOMER_NO, DATA_TABLE B WHERE A.CUSTOMER_ID = B.CUSTOMER_ID A.STATUS AND = '2'list_id로 AND = '+ @ LISTID +'") ' ;

관련 문제