【发布时间】:2019-08-14 04:52:32
【问题描述】:
我创建了这些,但它需要多参数,但是当它执行存储过程时,我得到一个错误:
将 NVARCHAR 值“141,139”转换为数据类型 int 时转换失败。
这是我的代码:
BEGIN
SET NOCOUNT ON;
DECLARE @temp NVARCHAR(MAX)
SET @temp = REPLACE(@Voucher_ID, '''', '')
SELECT
av.Voucher_No, avl.Ref_Dr_Cr, Av.Voucher_Amount,
avl.Ledger_Amount, AVLI.Quantity, AVli.Rate, AVli.PCS,
AVLI.Inventory_Total, AVli.Discount,al.Ledger_Name,
st.Stock_Name, st.HSN_Code, al.address,
(SELECT CASE WHEN al.Ledger_Name <> 'Rounded Off' AND avl.Ref_Dr_Cr = 'Dr' THEN al.GSTIN_No ELSE '' END) AS GSTIN_No,
(SELECT CASE WHEN avl.Ref_Dr_Cr = 'Dr' AND al.Ledger_Name <> 'Rounded Off' THEN al.Ledger_Name ELSE '' END) AS Party_Name,
(SELECT CASE WHEN al.Ledger_Name <> 'Rounded Off' AND avl.Ref_Dr_Cr = 'Dr' THEN al.Address ELSE ''END) AS Ledger_Address,
(SELECT CASE WHEN al.Ledger_Name = 'Rounded Off' AND avl.Ref_Dr_Cr = 'Dr' THEN CAST(avl.Ledger_Amount AS NVARCHAR(100)) ELSE '' END) AS Amount,
(SELECT CASE WHEN al.Ledger_Name LIKE '%IGST%'THEN CAST(avl.Ledger_Amount AS NVARCHAR(100)) ELSE '' END) AS IGST,
(SELECT CASE WHEN al.Ledger_Name LIKE '%SGST%'THEN CAST(avl.Ledger_Amount AS NVARCHAR(100)) ELSE '' END) AS SGST,
(SELECT CASE WHEN al.Ledger_Name LIKE '%CGST%'THEN CAST(avl.Ledger_Amount AS NVARCHAR(100)) ELSE '' END) AS CGST,
AVLI.UOM
FROM
Acc_Voucher AV
INNER JOIN
Acc_Voucher_Ledger AVL ON Av.Voucher_Id = avl.Voucher_ID
LEFT JOIN
Acc_Voucher_Ledger_Inventory AVLI ON AVL.Voucher_Ledger_Id = avli.Voucher_Ledger_Id
INNER JOIN
Acc_Ledger AL ON AVL.Ledger_Id = al.Ledger_ID
LEFT JOIN
Acc_Stock_Item St ON avli.Stock_Item_Id = st.Stock_Item_Id
WHERE
av.Voucher_ID IN (@Voucher_ID)
END
有什么想法吗?谢谢。
【问题讨论】:
-
我创建了这些,但它需要多参数,但是当执行 sp 时会出现错误:将 nvarchar 值 '141,139' 转换为数据类型 int 时转换失败。
-
欢迎来到 Stack Overflow。但是,不鼓励粘贴没有解释的代码块。 How to Ask。问候。
-
我已尝试修复您的帖子,但请在以后对问题中的问题提供完整且有用的解释。
-
我建议使用table-valued parameter 而不是分隔列表以避免解析。关于如何解析数组和列表,请参阅[这篇文章](sommarskog.se/arrays-in-sql.html)。
标签: sql-server tsql