2013-10-18 3 views
1

누구나 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 내가 조작 한 데이터를 기반으로 평면 파일에 대한 쿼리 아웃을 시도하고 있습니다. 아래 코드에서 오류가 계속 발생합니다. 모든 도움을 감사하십시오!bcp 오류가 계속 발생합니다.

아무도 내가 여기서 무엇을 잘못하고 있는지 말할 수 있습니까? 내가 조작 한 데이터를 기반으로 평면 파일에 대한 쿼리 아웃을 시도하고 있습니다. 아래 코드에서 오류가 계속 발생합니다. 모든 도움을 감사하십시오!

declare variables.... 

    select @effDate = effective_date from c_flt_src 

    if convert(varchar(10), @effDate, 112) = convert (varchar(10), GETDATE(),112) 
     set @sqleffdate = convert(varchar(10), @effDate, 112) 
     begin 
      select @all = store from c_flt_src where store = 'ALL' 

       if @@ROWCOUNT = 1 and @all = 'ALL' 
        select @action = action from c_flt_src 
         if @action = 'INCREASE' or @action = 'DECREASE' 
          set @actiontyp = 'UPDATE_STORE' 
         else if @action = 'REPLACE' 
          set @actiontyp = 'RESET_STORE' 


        select @a = a_amt from c_flt_src 
        select @b = b_amt from c_flt_src 

        begin 
         declare @c as cursor 
         set @c = CURSOR fast_forward for select distinct top 3 store from store_loc where store <> 0 order by store 
          open @c 
           fetch next from @c into @store 
            while @@FETCH_STATUS = 0 
             begin 
              --process data here 
              set @sql = @sqlaction + '|' + @actiontyp + '|' + @store + '|' + @a + '|' + @b 
              set @sql1 = '"'+'D:\file.'[email protected]+'.9999999.'+REPLICATE ('0', 3-LEN(@store)) + @store +'.deltaloc' + '"' 
              select @sql1 
              declare @s varchar(max) 
              set @s = ''''+'bcp "select ''''' + @sql + '''''"' + ' queryout ' + @sql1+ ' -c -t "|" -T'+'''' 
              select @s 
              execute master.dbo.xp_cmdshell @s 

            fetch next from @c into @store 
             end 
          close @c 
          deallocate @c 

        end 


     end 
+0

오류가 발생하는 라인은 무엇입니까? – hallie

+1

그리고 무엇이 오류입니까? – valex

+0

bcp를 실행하면 오류가 발생합니다. 오류는 "프로 시저가 'varchar'유형의 매개 변수 'command_String'을 필요로합니다." 내가 왜 varchar 변수 (@s)에 param을 배치했는지 알지 못한다. – user2885241

답변

0

시도가 varchar(4000) 또는 varchar(8000)varchar(max)

declare @s varchar(4000) 

xp_cmdshell (Transact-SQL)

을 command_string하지 않도록 @s의 선언을 대체하는 것은 STR인가 명령에는 조작중인 시스템으로 전달할 명령이 들어 있습니다. command_string은 varchar (8000) 또는 nvarchar (4000)이며 기본값은 없습니다.

+0

실제로 작동 했어! 나는 2000 년에 선언했고 스크립트는 완벽하게 작동했습니다! 도와 줘서 고마워! – user2885241

관련 문제