2017-01-05 5 views
0

Hallo, ich habe dieses SP.Konvertieren von Nvarchar-Typ zu numerischen SQL in gespeicherten Prozedur

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 

Das Problem ist, dass, wenn die Zeilennummer der Berechnung InvProduct nvarchar Datentyp ist. Also, ich habe einen Fehler, wenn ich dies in der RDL-Datei verwende. enter image description here Kann ich eine Idee/einen Einblick haben, wie ich das lösen kann?

P. S Ich habe diesen SP verwenden, um durch folgende diese Rechnungsart Bericht anzuzeigen: https://www.intertech.com/Blog/use-sql-server-reporting-services-to-generate-an-invoice-document/

+0

Was ist in ** InvProduct **? Kann es in * int * umgewandelt werden? – Stephen

+0

@Stephen InvProduct ist nvarchar type – 4stars

+0

ja, aber da Sie es konvertieren * INT * enthält es ganzzahlige Werte oder ist es eine Zeichenfolge? Offensichtlich, wenn es String-Werte sind, können Sie CONVERT nicht für INT verwenden. Warum versuchen Sie ein VARCHAR-Feld in INT zu konvertieren? – Stephen

Antwort

0

Könnten Sie bitte bestätigen InvDesc ist Nvarchar Datentyp oder int-Typ? Wenn es nvarchar Datentyp ist, dann verwenden Sie bitte '' anstelle von 0.

+0

zu erwähnen. Ich habe es versucht. Aber es ist nicht in Ordnung. – 4stars

+0

ok, können wir OVER (ORDER BY InvProduct) als InvoiceRow verwenden? –

+0

Ja, ich kann einfach einfach OVER (ORDER BY InvProduct) verwenden – 4stars

Verwandte Themen