2014-11-21 2 views
0

SQL의 회계 데이터를 "ServiceCode"가 02, 35, 55 또는 70 인 일련의 TXT 파일로 내보내야합니다. "02"을 제외한 모든 데이터가 작동합니다. 나는 선두의 제로를 붙잡을 수 없다. 여기 SQL에서 선행 0을 TXT로 내보내기

는 SQL 스크립트입니다 :


USE [DsPcDb] 
GO 
/****** Object: StoredProcedure [dbo].[JRServiceUsage_S] Script Date: 11/21/2014 14:26:20 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 



-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
ALTER PROCEDURE [dbo].[JRServiceUsage_S] 
    -- Add the parameters for the stored procedure here 
    @serviceCode varchar(2) 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- Insert statements for procedure here 
    DECLARE @beginDate datetime, @endDate datetime, @itemCount int, @total decimal(10,2) 
    SET @beginDate = DATEADD(day,DATEDIFF(day,1,GETDATE()),0) 
    SET @endDate = DATEADD(day,DATEDIFF(day,0,GETDATE()),0) 
    --PRINT @beginDate 
    --PRINT @endDate 

    CREATE TABLE #tblData(CostCenter nvarchar(50), ItemCount int, ServerName nvarchar(50), ServiceCode int, Price decimal(10,2)) 
    CREATE TABLE #tblTotals(UsageDate datetime, CostCenter nvarchar(50), ServiceCode int, ItemCount int, Total decimal(10,2)) 

    INSERT INTO #tblData SELECT ServiceConsumer_T_Projekt.Name, ServiceUsage_T.Cardinality, ServiceProvider_T.ServerName, Service_T.ServiceCode, ServiceUsage_T.AmountPaid 
    FROM ServiceConsumer_T AS ServiceConsumer_T RIGHT OUTER JOIN 
    ServiceUsage_T AS ServiceUsage_T ON ServiceConsumer_T.ID = ServiceUsage_T.ServiceConsumer LEFT OUTER JOIN 
    ServiceConsumer_T AS ServiceConsumer_T_Group ON ServiceUsage_T.ServConsGroup = ServiceConsumer_T_Group.ID LEFT OUTER JOIN 
    ServiceConsumer_T AS ServiceConsumer_T_Projekt ON ServiceUsage_T.ServConsProject = ServiceConsumer_T_Projekt.ID LEFT OUTER JOIN 
    ServiceProvider_T AS ServiceProvider_T ON ServiceUsage_T.ServiceProvider = ServiceProvider_T.ID INNER JOIN 
    Service_T AS Service_T ON ServiceUsage_T.Service = Service_T.ID 
    WHERE (ServiceUsage_T.UsageEnd >= @beginDate) AND (ServiceUsage_T.UsageEnd < @endDate) 

    UPDATE #tblData SET CostCenter = '' WHERE CostCenter IS NULL 

    -- SELECT COST CENTER GROUPS -- 
    DECLARE @costCenter varchar(50) 
    DECLARE tempCCCursor CURSOR 
    FOR SELECT CostCenter 
     FROM #tblData 
     GROUP BY CostCenter 
    OPEN tempCCCursor 
    FETCH NEXT FROM tempCCCursor 
    INTO @costCenter 
    WHILE @@FETCH_STATUS = 0 
    BEGIN 
     SET @total = 0 
     SET @itemCount = 0 

     IF @serviceCode = '02' 
     BEGIN 
      SELECT @total = COALESCE(SUM(Price),0), @itemCount = COALESCE(SUM(ItemCount),0) 
      FROM #tblData 
      WHERE CostCenter = @costCenter AND ServiceCode IN(SELECT DISTINCT [ServiceCode] 
       FROM [DsPcDb].[dbo].[Service_T] 
       WHERE [Name] NOT LIKE '%color%' AND [Name] NOT LIKE '%scan%' AND [Name] NOT LIKE '%fax%' AND [ServiceCode] <= 196623) 
     END 

     IF @serviceCode = '55' 
     BEGIN 
      SELECT @total = COALESCE(SUM(Price),0), @itemCount = COALESCE(SUM(ItemCount),0) 
      FROM #tblData 
      WHERE CostCenter = @costCenter AND ServiceCode IN(SELECT DISTINCT [ServiceCode] 
       FROM [DsPcDb].[dbo].[Service_T] 
       WHERE [Name] LIKE '%color%' AND [Name] NOT LIKE '%scan%' AND [Name] NOT LIKE '%fax%' AND [ServiceCode] <= 262159) 
     END 

     IF @serviceCode = '70' 
     BEGIN 
      SELECT @total = COALESCE(SUM(Price),0), @itemCount = COALESCE(SUM(ItemCount),0) 
      FROM #tblData 
      WHERE CostCenter = @costCenter AND ServiceCode IN(SELECT DISTINCT [ServiceCode] 
       FROM [DsPcDb].[dbo].[Service_T] 
       WHERE [Name] LIKE '%scan%') 
     END 

     IF @serviceCode = '35' 
     BEGIN 
      SELECT @total = COALESCE(SUM(Price),0), @itemCount = COALESCE(SUM(ItemCount),0) 
      FROM #tblData 
      WHERE CostCenter = @costCenter AND ServiceCode IN(SELECT DISTINCT [ServiceCode] 
       FROM [DsPcDb].[dbo].[Service_T] 
       WHERE [Name] LIKE '%fax%' AND [ServiceCode] <= 393231) 
     END 

     IF (@itemCount <> 0) 
     BEGIN 
      INSERT INTO #tblTotals (CostCenter, ServiceCode, ItemCount, Total) 
      VALUES (@CostCenter, @serviceCode, @itemCount, @total) 
     END 

     FETCH NEXT FROM tempCCCursor INTO @costCenter 
    END 

    CLOSE tempCCCursor 
    DEALLOCATE tempCCCursor 
    -- END SELECT COST CENTER GROUPS -- 

    SELECT * FROM #tblTotals ORDER BY CostCenter 

    DROP TABLE #tblData 
    DROP TABLE #tblTotals 

END 

... 그리고 여기에 3 분의 1에서 제거 선도 0으로, .txt 파일은 "02"출력에서 일부 텍스트입니다 컬럼 :


21분의 11/2014,00000-24057,2,1125
21분의 11/2014,00001-0,123,800 MKTG12,2,150 731,627,552,314,960,453,210 21분의 11/2014,40059-00395,2,62
21분의 11/2014,40059-00409,2,32
21분의 11/2014,40059-00428,2,12
11/21/2014,40059-00432,2,2
21분의 11/2014,40059-00434,2,218


이 수신 데이터베이스 가져 오기 데이터를하지 않습니다. ("02"특정 코드입니다.) 내가 말했듯이 다른 세 txt 파일을 제대로 가져옵니다.

도와주세요! 감사합니다.

+0

'# tblTotals.ServiceCode'를'char (2)'(또는 올바른 유형이 무엇이든)로 선언하는 것은 어떻습니까? –

답변

0

열을 정수로 정의하므로 정수로 출력된다는 것은 놀라운 일이 아닙니다. 난 그냥 임의하지-너무 긴 문자열에 대한 varchar(255)를 사용

CREATE TABLE #tblTotals (
    UsageDate datetime, 
    CostCenter nvarchar(50), 
    ServiceCode varchar(255), 
----------------^ 
    ItemCount int, 
    Total decimal(10,2) 
) 

: 그것은 몇 가지 변수 유형을 확인합니다. 당신은 더 나은 유형이있을 것입니다.

코드가 데이터베이스에 문자열로 저장되어 있으면 문제가 해결됩니다.

관련 문제