存储过程没有真正返回任何内容

时间:2018-04-25 13:20:14

标签: sql-server

使用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'

小屏幕拍摄

enter image description here

并且不,这不是MVC解决方案的副本 - 我看了。

我的问题是..我将如何添加到此存储过程以返回值。

enter image description here

2 个答案:

答案 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!