无法访问 sql 中查询的表值参数
Posted
技术标签:
【中文标题】无法访问 sql 中查询的表值参数【英文标题】:Not able to access Table Valued Parameter for queries in sql 【发布时间】:2014-10-16 08:48:54 【问题描述】:我在单个存储过程中有两个查询。 我有一个表值参数和我用于两个查询的 TVP。 我的一个查询工作正常(更新查询工作正常),但如果我使用相同的 TVP 进行插入查询,那么它不会向其中插入值。 我不知道发生了什么并且错误也不会出现。
这是我的查询:
CREATE TYPE Mapping_n_Info_Master_Type AS TABLE
(
quantity INT,
product_id INT,
sell_order_no VARCHAR(20),
selling_product_id VARCHAR(20),
tax_id INT
);
GO
CREATE PROC spInsert_Rs_Sell_Order_Master
(
@tvp_Mapping_n_Info_Master Mapping_n_Info_Master_Type READONLY
)
AS
BEGIN
SET NOCOUNT ON
BEGIN TRY
BEGIN TRANSACTION
--Start This Part is not Working
INSERT INTO
RS_Sells_Invoice_Info_Master
SELECT
sell_order_no,product_id,selling_product_id,tax_id,qty
FROM
@tvp_Mapping_n_Info_Master
--End This Part is not Working
--Insert Logic For Sell Order Mapping
UPDATE
RS_Sell_Order_Mapping
SET
quantity = TVP.quantity
FROM
@tvp_Mapping_n_Info_Master tvp
INNER JOIN RS_Sell_Order_Mapping AS SOM ON
TVP.product_id = SOM.product_id AND TVP.sell_order_no = SOM.sell_order_no
WHERE
SOM.product_id = TVP.product_id
AND
SOM.sell_order_no = TVP.sell_order_no
COMMIT TRANSACTION
END TRY
BEGIN CATCH
DECLARE @ERROR_MSG NVARCHAR(MAX), @SEVERITY INT, @STATE INT
SELECT @SEVERITY = ERROR_SEVERITY(), @STATE = ERROR_STATE()
,@ERROR_MSG = ERROR_MESSAGE() + ' err src line: ' + CAST( ERROR_LINE() AS NVARCHAR(20)) + ' ' + ISNULL(ERROR_PROCEDURE(), '');
--@ERROR_MSG = ERROR_MESSAGE()
ROLLBACK;
-- RE-THROW EXCEPTION FOR DIAGNOSTIC VISIBILITY
RAISERROR (@ERROR_MSG ,@SEVERITY, @STATE);
RETURN
END CATCH
END
我的桌子是这样的
我是否要更改已提供给插入查询的参数序列。 请对此提出您的建议
【问题讨论】:
您在插入查询中使用了 qty 而不是 quantity。我想这可能是问题所在。在 TVP 中您定义了数量,在插入查询中您使用的是数量。 感谢 Krishnaraj 的帮助.....!!!! 你能告诉我为什么我们必须使用这个 Table 类型以及什么是 table 类型 【参考方案1】:写成:
INSERT INTO
RS_Sells_Invoice_Info_Master (sell_order_no,
product_id,
selling_product_id,
tax_id,
qty)
SELECT MIM.sell_order_no,
MIM.product_id,
MIM.selling_product_id,
MIM.tax_id,
MIM.quantity
FROM
@tvp_Mapping_n_Info_Master as MIM;
【讨论】:
你能告诉我为什么我们必须使用这个 Table 类型以及什么是 table 类型以上是关于无法访问 sql 中查询的表值参数的主要内容,如果未能解决你的问题,请参考以下文章
为啥需要以只读方式输入 SQL Server 存储过程的表值参数?