gpt4 book ai didi

sql-server - 具有多个输出参数的 SQL Server 2008 存储过程

转载 作者:行者123 更新时间:2023-12-02 16:57:36 25 4
gpt4 key购买 nike

我有一个存储过程如下:

ALTER PROCEDURE [dbo].[sp_web_orders_insert]
(
@userId int = default,
@custId int = default,
@orderDate datetime = default,
@orderTotal money = default,
@statusId int = default,
@orderReference varchar(50) = default,
@custReference varchar(50) = default,
@order_ID INT output,
@orderReferenceOutput varchar(50) output
)
AS


SET NOCOUNT OFF;
INSERT INTO [web_orders] ([user_ID], [cust_ID], [orderDate], [orderTotal], [statusId], [orderReference], [custReference]) VALUES (@userId, @custId, @orderDate, @orderTotal, @statusId , 'PLC' + REPLICATE('0', (7 - LEN((select MAX(order_ID) from web_orders)))) + CAST((select(max(order_ID)+1) from web_orders) AS VARCHAR(5)), @custReference);

SELECT @order_ID = @@IDENTITY
RETURN @order_ID

SELECT @orderReferenceOutput = 'PLC' + REPLICATE('0', (7 - LEN((select MAX(order_ID) from web_orders)))) + CAST((select(max(order_ID)+1) from web_orders) AS VARCHAR(5))
RETURN @orderReferenceOutput

由于某种原因,第二个输出参数@orderReferenceOutput不返回任何内容。第二个输出参数的目的是检索我刚刚插入数据库的列。

最佳答案

您有多个输出参数,您应该使用它们。 RETURN 值用于错误/状态代码,而不是数据。

ALTER PROCEDURE [dbo].[sp_web_orders_insert]
@userId ...,
@order_ID INT OUTPUT,
@orderReferenceOutput VARCHAR(50) OUTPUT
AS
BEGIN
SET NOCOUNT OFF; -- WHY?????????

INSERT INTO [web_orders] (user_ID, ...) SELECT @userId, ...;

SELECT @order_ID = SCOPE_IDENTITY(); -- preferred over @@IDENTITY;

-- using @order_ID here instead of SELECT MAX() twice:

SELECT @orderReferenceOutput = 'PLC'
+ REPLICATE('0', (7 - LEN((@order_ID+1))))
+ CAST((@order_ID+1) AS VARCHAR(5)) -- (5)? This breaks when you hit order #100,000

RETURN; -- do not RETURN any data - it's already in your OUTPUT parameters!
END
GO

关于sql-server - 具有多个输出参数的 SQL Server 2008 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6999441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com