Azure SQL で次のストアド プロシージャを作成しました。
ALTER PROCEDURE [dbo].[Composite_Shop_GetNextOrdreNo]
@OrderPrefix NVARCHAR(50) OUTPUT,
@IsTestMode int = 0
AS
DECLARE @NextOrderNumber int
IF NOT EXISTS (SELECT TOP 1 [OrderPrefix]
FROM [dbo].[Composite_Shop_OrderNumber]
WHERE [OrderPrefix] = @OrderPrefix)
BEGIN
INSERT INTO [dbo].[Composite_Shop_OrderNumber] (OrderPrefix)
VALUES (@OrderPrefix)
END
UPDATE [dbo].[Composite_Shop_OrderNumber] WITH (READCOMMITTEDLOCK)
SET @NextOrderNumber = Number = Number + 1
WHERE [OrderPrefix] = @OrderPrefix
SELECT @OrderPrefix = @OrderPrefix + REPLICATE('0', 6 - LEN(RTRIM(CONVERT(nvarchar(50), @NextOrderNumber)))) + CONVERT(nvarchar(50), @NextOrderNumber)
RETURN
C# から何を試しても、1 つのパラメーターを指定して再度変更することに成功しませんでした。
直感的にはこれでうまくいくと思いますが、そうではありません。
var param = new SqlParameter("@OrderPrefix",SqlDbType.NVarChar);
param.value = "test";
param.Direction = ParameterDirection.InputOutput;
cmd.Parameters.Add(param);
実行後にパラメーターを確認すると、送信時と同じです。
私が見逃した何かがあるに違いないと思います。