使用sql server,在azure。
请求存储过程以从开发人员返回下一个号码。
这是他们回来的。
BEGIN
exec ('
SELECT
(
SELECT FORMAT(getdate(),agencyFormat) FROM [dbo].[tblCardNextNum] WHERE agencyID = '+@agencyID+' and type = '''+@type+''') +
FORMAT(NEXT VALUE FOR [dbo].['+@agencyShort+'],
(
SELECT REPLICATE(''0'',
(
SELECT [agencyMaxLength] FROM [dbo].[tblCardNextNum] WHERE agencyID = '+@agencyID+' and type = '''+@type+'''
)
)
)
)
')
END
现在当我在ssms中执行存储过程时,它会显示下一个数字,但它不会返回任何内容,只会显示它。
所以我的问题是......
我将这个存储过程添加到实际上将新创建的数字返回给调用函数?
那些询问调用此存储过程的人......
EXEC [dbo].[GetCrudAgencyNextNum]
@agencyShort = N'PLFD',
@agencyID = 2,
@type = N'C'
小屏幕拍摄
并且不,这不是MVC解决方案的副本 - 我看了。
我的问题是..我将如何添加到此存储过程以返回值。
答案 0 :(得分:1)
这里有一个很多的猜测,因为代码图片没有帮助。
首先,正如我在评论中所说,请参数化您的SQL;连接这样的字符串是一个等待发生的注入问题。这是2018年,这样的不良后果应该成为过去。
接下来,SP的返回值是0或1,就是这样。如果要输出到变量,请使用OUTPUT
参数。
以下内容应该会让您走上正确的道路,但未经测试:
CREATE PROC YourProc @AgencyShort sysname, @AgencyID int, @Type nchar(1), @Return bigint OUTPUT AS --I have GUESSED your datatypes
BEGIN
DECLARE @SQL nvarchar(MAX);
DECLARE @Params nvarchar(MAX);
SET @SQL = N'SELECT @dReturn = (SELECT FORMAT(getdate(),agencyFormat)' + NCHAR(10) +
N' FROM [dbo].[tblCardNextNum]' + NCHAR(10) +
N' WHERE agencyID = @dAgencyID' + NCHAR(10) +
N' AND type = @dtype) + ' + NCHAR(10) +
N' FORMAT(NEXT VALUE FOR [dbo].' + QUOTENAME(@agencyShort) + N' (SELECT REPLICATE(''0'',(SELECT [agencyMaxLength]' + NCHAR(10) +
N' FROM [dbo].[tblCardNextNum]' + NCHAR(10) +
N' WHERE agencyID = @dAgencyID' + NCHAR(10) +
N' AND type = @dType))));';
PRINT @SQL; --Your Best Friend
SET @Params = N'@dAgencyID int, @dType nchar(1), @dReturn bigint OUTPUT'; -- I have GUESSED your datatypes
EXEC sp_executesql @SQL, @Params, @dAgencyID = @AgencyID, @dType = @Type, @dReturn = @Return OUTPUT;
END
GO
DECLARE @Return bigint;
EXEC YourProc N'PLFD',2, N'C', @Return OUTPUT;
SELECT @Return AS [Return];
如果这不起作用,那么你最好的朋友可以帮助你。
答案 1 :(得分:0)
将存储的proc踢回DBA后......他们重新编写了它,现在我们有了一个有效的存储过程YEA!