こんにちは、私はこの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ファイルでこれを使用するとエラーが発生します。 これを解決する方法をいくつか考えてもらえますか?私はこれに従うことによって、請求書タイプのレポートを表示するために、このSPを使用する必要が
P.S: https://www.intertech.com/Blog/use-sql-server-reporting-services-to-generate-an-invoice-document/
** InvProduct **には何がありますか? * int *に変換できますか? – Stephen
@Stephen InvProductはnvarcharタイプ – 4stars
ですが、* INT *に変換しているので、整数値を含んでいますか、それとも文字列ですか?明らかに文字列値の場合は、CONVERTをINTに使用することはできません。なぜあなたはvarcharフィールドをINTに変換しようとしていますか? – Stephen