我创建一个存储过程
CREATE PROCEDURE [dbo].[wsp_Display_Invoice]
@DOID NVARCHAR(50),
@brcode INT
AS
BEGIN
SELECT DISTINCT
A.Item_Code,
(B.Description + '-' + B.Product_Code + '(' + D.Brand_Name+ ')') AS Description,
A.Quantity, B.UOM, A.Rate, A.DOID,
C.Doc_No, B.Tax_Percentage AS Tax, B.Tax_Percentage AS Tax1,
F.QuotationID
FROM
DO_T A
INNER JOIN
inv_Item_Master B ON A.Item_Code = B.Item_Code
INNER JOIN
DO C ON A.DOID = C.DOID
INNER JOIN
Inv_Brand D ON D.Brand_ID = B.Brand_ID
INNER JOIN
Quotation_T F ON F.DOID = A.DOID
WHERE
A.DOID LIKE '%' + @DOID + '%'
AND a.BR_Code = @brcode
END
出现错误
将 nvarchar 值“22,23”转换为数据类型 int 时转换失败。
您的代码正在某处进行隐式转换。明显的地方是与
+
的字符串连接。如果任何参数是数字,则 +
会被解释为数字加法——并且您会收到错误。
不太明显的地方是其他操作,比如
JOIN
条件。如果一列是字符串,另一列是数字,那么 SQL Server 会尝试将该字符串转换为数字——并且您可能会收到错误。
所以,我会尝试以下方法。
更换:
(B.Description + '-' + B.Product_Code + '(' + D.Brand_Name+ ')') AS Description,
与:
(B.Description + '-' + CAST(B.Product_Code as VARCHAR(255)) + '(' + D.Brand_Name+ ')') AS Description,
仅当
Product_Code
是数字时才需要。
A.DOID LIKE '%' + @DOID + '%'
与:
CAST(A.DOID as VARCHAR(255)) LIKE '%' + @DOID + '%'
这只需要
A.DOID
是一个数字。
将
@brcode
的类型更改为字符串。仅当 a_BR_CODE
是数字时才需要这样做。
如果这些不起作用,您将必须查看
JOIN
条件,看看其中是否有任何混合类型。
我还认为我们需要知道各个表中DOID字段的数据类型。我的猜测是其中一个连接上存在数据类型不匹配。
尝试以下操作:
CREATE PROCEDURE [dbo].[wsp_Display_Invoice]
@DOID NVARCHAR(50),
@brcode INT
AS
BEGIN
SELECT DISTINCT
A.Item_Code,
(B.Description + '-' + B.Product_Code + '(' + D.Brand_Name+ ')') AS Description,
A.Quantity, B.UOM, A.Rate, A.DOID,
C.Doc_No, B.Tax_Percentage AS Tax, B.Tax_Percentage AS Tax1,
F.QuotationID
FROM
DO_T A
INNER JOIN
inv_Item_Master B ON A.Item_Code = B.Item_Code
INNER JOIN
DO C ON A.DOID = C.DOID
INNER JOIN
Inv_Brand D ON D.Brand_ID = B.Brand_ID
INNER JOIN
Quotation_T F ON F.DOID = A.DOID
WHERE
CONVERT(varchar(50), A.DOID) LIKE '%' + @DOID + '%'
AND a.BR_Code = @brcode
END