2016-07-26 131 views
0

我試圖將Int轉換爲Varchar,但是我無法獲得輸出。任何人都可以建議任何其他方式來這樣做?如何將Int轉換爲Varchar

我有下面的查詢,需要投StoreNoint)到varchar

ALTER PROCEDURE [dbo].[getrevenue] 
    @date1 DATE, 
    @date2 DATE, 
    @StoreNo NVARCHAR(max) 
AS 
BEGIN 
    DECLARE @sql_test NVARCHAR(max) 

    --SET @StoreNo='68,78,104' 
    SET @sql_test = 'SELECT t1.transtoreno AS StoreNO 
      ,t3.NAME AS NAME 
      ,t1.Dealdate AS DATE 
      ,t1.UKEI AS UKEI 
      ,t2.SubTotal AS SubTotal 
      ,ISNULL(t2.SubTotalDiscount, 0) AS SubToatlDiscount 
      ,ISNULL(t1.twoeyesSubtotalDiscount, 0) AS TwoeyeSubTotalDiscount 
      ,t2.ValueInquiries AS TotalDiscount 
      ,t2.NetSale AS Netsale 
      ,t2.TotalSale AS ToatlSale 
      ,t2.Cash AS Cash 
      ,ISNULL(t2.GiftVochuer, 0) AS GiftVochuer 
      ,ISNULL(t2.Card, 0) AS Card 
      ,ISNULl(t2.Suica, 0) AS Suica 
      ,t2.WONPOINT AS WAONPOINT 
      ,t1.TaxExemption AS TAXExemption 
      ,t2.TaxTotal AS TaxTotal 
      ,t2.Returngoods AS Returngoods 
      ,t2.Regiminus AS RegiMinus 
      ,t2.PrintRecipt AS printrecipt 
      ,ISNULL(t1.Visitorcount, 0) AS VisitorCount 
     FROM (
      SELECT CAST(StoreNo AS NVARCHAR) AS transtoreno 
       ,(DealDate) AS Dealdate 
       ,SUM(SalePrice) AS UKEI 
       ,SUM(TansuNebikiPrice) AS twoeyesdicount 
       ,SUM(SubTotalNebiki2Price) AS twoeyesSubtotalDiscount 
       ,SUM(TotalSalePrice - Si1Tax - RegiMinusNo) AS Netsale 
       ,SUM(SpecialConsumptionTaxPrice) AS TaxExemption 
       ,Sum(RegiMinusNo) AS Receiptissue 
       ,SUM(VisitorCount) AS Visitorcount 
      FROM POS_TtlTran 
      GROUP BY StoreNo 
       ,DealDate 
      ) t1 
     LEFT OUTER JOIN (
      SELECT DATE AS D 
       ,cast(StoreNo AS NVARCHAR) AS s 
       ,SUM(CASE 
         WHEN SerialNo LIKE 23 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Cash 
       ,SUM(CASE 
         WHEN SerialNo LIKE 31 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Card 
       ,SUM(CASE 
         WHEN SerialNo LIKE 30 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS GiftVochuer 
       ,SUM(CASE 
         WHEN SerialNo LIKE 138 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Returngoods 
       ,SUM(CASE 
         WHEN SerialNo LIKE 160 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS PrintRecipt 
       ,SUM(CASE 
         WHEN SerialNo LIKE 304 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Suica 
       ,SUM(CASE 
         WHEN SerialNo LIKE 26 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS WONPOINT 
       ,SUM(CASE 
         WHEN SerialNo LIKE 139 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Regiminus 
       ,SUM(CASE 
         WHEN SerialNo LIKE 4 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS SubToTal 
       ,SUM(CASE 
         WHEN SerialNo LIKE 7 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS SubTotalDiscount 
       ,SUM(CASE 
         WHEN SerialNo LIKE 8 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS TwoeyesubTotalDiscount 
       ,SUM(CASE 
         WHEN SerialNo LIKE 18 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS ValueInquiries 
       ,SUM(CASE 
         WHEN SerialNo LIKE 22 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS TotalSale 
       ,SUM(CASE 
         WHEN SerialNo LIKE 114 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS TaxTotal 
       ,SUM(CASE 
         WHEN SerialNo LIKE 2 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS NetSale 
      FROM POS_FinTtl 
      GROUP BY StoreNo 
       ,DATE 
      ) t2 ON t1.transtoreno = t2.s 
      AND t1.Dealdate = t2.D 
     LEFT OUTER JOIN (
      SELECT StoreNo AS No 
       ,StoreName AS NAME 
      FROM Store 
      ) t3 ON t2.s = t3.No 
     WHERE (
       t1.transtoreno IN (''' 
       + CAST(@StoreNo AS NVARCHAR(max)) + ''') 
       AND (t1.Dealdate between ''' + CAST(@date1 AS VARCHAR(30)) + ''' 
       AND ''' + CAST(@date2 AS VARCHAR(30)) + '''))' 
END 
+0

硒ems對我來說這是一個數據庫設計問題。如果它們是數字,則更改模式並將它們設爲INT數據類型。 – RiggsFolly

回答

0

希望這一個將工作

ALTER PROCEDURE [dbo].[getrevenue] @date1 DATE 
    ,@date2 DATE 
    ,@StoreNo NVARCHAR(max) ` 
AS 
BEGIN 
    DECLARE @sql_test NVARCHAR(max) 

    --SET @StoreNo='68,78,104' 
    SET @sql_test ='SELECT t1.transtoreno AS StoreNO 
      ,t3.NAME AS NAME 
      ,t1.Dealdate AS DATE 
      ,t1.UKEI AS UKEI 
      ,t2.SubTotal AS SubTotal 
      ,ISNULL(t2.SubTotalDiscount, 0) AS SubToatlDiscount 
      ,ISNULL(t1.twoeyesSubtotalDiscount, 0) AS TwoeyeSubTotalDiscount 
      ,t2.ValueInquiries AS TotalDiscount 
      ,t2.NetSale AS Netsale 
      ,t2.TotalSale AS ToatlSale 
      ,t2.Cash AS Cash 
      ,ISNULL(t2.GiftVochuer, 0) AS GiftVochuer 
      ,ISNULL(t2.Card, 0) AS Card 
      ,ISNULl(t2.Suica, 0) AS Suica 
      ,t2.WONPOINT AS WAONPOINT 
      ,t1.TaxExemption AS TAXExemption 
      ,t2.TaxTotal AS TaxTotal 
      ,t2.Returngoods AS Returngoods 
      ,t2.Regiminus AS RegiMinus 
      ,t2.PrintRecipt AS printrecipt 
      ,ISNULL(t1.Visitorcount, 0) AS VisitorCount 
     FROM (
      SELECT CAST(StoreNo AS NVARCHAR) AS transtoreno 
       ,(DealDate) AS Dealdate 
       ,SUM(SalePrice) AS UKEI 
       ,SUM(TansuNebikiPrice) AS twoeyesdicount 
       ,SUM(SubTotalNebiki2Price) AS twoeyesSubtotalDiscount 
       ,SUM(TotalSalePrice - Si1Tax - RegiMinusNo) AS Netsale 
       ,SUM(SpecialConsumptionTaxPrice) AS TaxExemption 
       ,Sum(RegiMinusNo) AS Receiptissue 
       ,SUM(VisitorCount) AS Visitorcount 
      FROM POS_TtlTran 
      GROUP BY StoreNo 
       ,DealDate 
      ) t1 
     LEFT OUTER JOIN (
      SELECT DATE AS D 
       ,cast(StoreNo AS NVARCHAR) AS s 
       ,SUM(CASE 
         WHEN SerialNo LIKE 23 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Cash 
       ,SUM(CASE 
         WHEN SerialNo LIKE 31 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Card 
       ,SUM(CASE 
         WHEN SerialNo LIKE 30 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS GiftVochuer 
       ,SUM(CASE 
         WHEN SerialNo LIKE 138 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Returngoods 
       ,SUM(CASE 
         WHEN SerialNo LIKE 160 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS PrintRecipt 
       ,SUM(CASE 
         WHEN SerialNo LIKE 304 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Suica 
       ,SUM(CASE 
         WHEN SerialNo LIKE 26 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS WONPOINT 
       ,SUM(CASE 
         WHEN SerialNo LIKE 139 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS Regiminus 
       ,SUM(CASE 
         WHEN SerialNo LIKE 4 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS SubToTal 
       ,SUM(CASE 
         WHEN SerialNo LIKE 7 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS SubTotalDiscount 
       ,SUM(CASE 
         WHEN SerialNo LIKE 8 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS TwoeyesubTotalDiscount 
       ,SUM(CASE 
         WHEN SerialNo LIKE 18 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS ValueInquiries 
       ,SUM(CASE 
         WHEN SerialNo LIKE 22 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS TotalSale 
       ,SUM(CASE 
         WHEN SerialNo LIKE 114 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS TaxTotal 
       ,SUM(CASE 
         WHEN SerialNo LIKE 2 
          THEN DayTotalAmt 
         ELSE 0 
         END) AS NetSale 
      FROM POS_FinTtl 
      GROUP BY StoreNo 
       ,DATE 
      ) t2 ON t1.transtoreno = t2.s 
      AND t1.Dealdate = t2.D 
     LEFT OUTER JOIN (
      SELECT StoreNo AS No 
       ,StoreName AS NAME 
      FROM Store 
      ) t3 ON t2.s = t3.No 
     WHERE (
       t1.transtoreno IN (''' 
       + CONVERT(varchar(MAX), @StoreNo) + ''') 
       AND (t1.Dealdate between ''' + CAST(@date1 AS VARCHAR(30)) + ''' 
       AND ''' + CAST(@date2 AS VARCHAR(30)) + '''))' 

END 
+0

等待操作超時[Win32Exception(0x80004005):等待操作超時] – Krish

+0

對不起,我錯過了一行代碼。它沒有執行動態查詢。請添加該行,並讓我知道。 – thejustv

0
where (t1.transtoreno IN (''' 
     + CAST(@StoreNo AS nvarchar(max)) + ''') 

應該

where (t1.transtoreno IN (''' 
     + replace(CAST(@StoreNo AS nvarchar(max)),',',''',''') + ''') 
相關問題