2017-01-05 9 views
0

こんにちは、私はこのSPを持っています。ストアドプロシージャのnvarchar型を数値sqlに変換する

USE [Invoice] 
GO 
SET ANSI_NULLS OFF 
GO 
SET QUOTED_IDENTIFIER OFF 
GO 
ALTER PROCEDURE [dbo].[uspInvoiceLines] 
(@InInvoiceNbr int 
,@InLinesPerPage int 
) 
AS 
DECLARE @TotalRows int 
DECLARE @Remainder int 
DECLARE @NumPages int 
DECLARE @NextPageRows int 
set @TotalRows= 0 
SELECT 
ROW_NUMBER() OVER(ORDER BY CONVERT(INT, InvProduct))as InvoiceRow, 
              CoID, 
              InvNo, 
              InvProduct, 
              InvDesc, 
              InvQuantity, 
              InvUOM, 
              InvUnitPrice, 
              InvAmt 

into #tempInvoice 
FROM Invoice_Products 



SET @TotalRows= @@ROWCOUNT 
IF @TotalRows=0 
    BEGIN 
     WHILE @TotalRows < @InLinesPerPage -- Add Blank Rows will generate blank invoice. 
      BEGIN 
       SET @TotalRows= @TotalRows+1 
       INSERT #tempInvoice 
       (InvoiceRow, 
       CoID, 
       InvNo, 
       InvProduct, 
       InvDesc, 
       InvQuantity, 
       InvUOM, 
       InvUnitPrice, 
       InvAmt 
       ) 
       VALUES 
       (@TotalRows 
       ,@InInvoiceNbr 
       ,'' 
       ,'' 
       ,0 
       ,0 
       ,0 
       ,'' 
       ,0 
       ,0) 
      END 
    END 
ELSE 
    BEGIN 
     SET @Remainder = @TotalRows%@InLinesPerPage -- get remainder 
     IF @Remainder !=0 
     BEGIN 
      -- Get the current page increase by 1 becasue we have a remainder. 
      SET @NumPages = @TotalRows/@InLinesPerPage +1 
      SET @NextPageRows = @NumPages * @InLinesPerPage 
      WHILE @TotalRows < @NextPageRows -- Add Blank Rows 
      BEGIN 
       SET @TotalRows= @TotalRows+1 
       INSERT #tempInvoice 
       (InvoiceRow, 
       CoID, 
       InvNo, 
       InvProduct, 
       InvDesc, 
       InvQuantity, 
       InvUOM, 
       InvUnitPrice, 
       InvAmt 
       ) 
       VALUES 
       (@TotalRows 
       ,@InInvoiceNbr 
       ,'' 
       ,'' 
       ,0 
       ,0 
       ,0 
       ,'' 
       ,0, 
       0) 
      END 
     END 
    END 
SELECT * from #tempInvoice order by InvoiceRow asc 
return 

問題は、行数を算出する際に、InvProductがNVARCHARデータ型であることです。したがって、RDLファイルでこれを使用するとエラーが発生します。 enter image description here これを解決する方法をいくつか考えてもらえますか?私はこれに従うことによって、請求書タイプのレポートを表示するために、このSPを使用する必要が

P.S: https://www.intertech.com/Blog/use-sql-server-reporting-services-to-generate-an-invoice-document/

+0

** InvProduct **には何がありますか? * int *に変換できますか? – Stephen

+0

@Stephen InvProductはnvarcharタイプ – 4stars

+0

ですが、* INT *に変換しているので、整数値を含んでいますか、それとも文字列ですか?明らかに文字列値の場合は、CONVERTをINTに使用することはできません。なぜあなたはvarcharフィールドをINTに変換しようとしていますか? – Stephen

答えて

0

あなたはInvDescを確認してもらえデータ型はnvarcharデータ型またはint型ですか? nvarcharデータ型の場合は、0の代わりに ''を使用してください。

+0

を言及するのを助けます。私はそれを試してみました。しかし、それはOKではありません。 – 4stars

+0

OK、InvoiceRowとしてOVER(Invord by ORDER BY)を使用できますか? –

+0

はい、私は単純にオーバー(オーダーBY InvProduct) – 4stars

関連する問題