SQL Server过程中输出中的别名

时间:2019-06-28 15:02:43

标签: sql-server tsql

我通过声明输出变量编写了一个存储过程,并成功执行了。但是,执行完之后,我不想在输出中使用所谓的“ @”字符。

我正在使用SQL Server 2012。

CREATE PROCEDURE xyz
AS
    (@abc VARCHAR(100),
     @def VARCHAR(100) = NULL OUTPUT,
     @ghi INT = NULL OUTPUT,
     @message NVARCHAR(100) = NULL OUTPUT)
BEGIN
    SELECT 
        @def = def, @ghi = ghi 
    FROM
        alphabets  
    WHERE
        abc = @abc

    RETURN 1
END

BEGIN CATCH
   IF (ERROR_NUMBER() = 1205)
   BEGIN
       RAISERROR('DEADLOCK', 13, 51)
   END
   ELSE
       SELECT @message  = CONCAT (ERROR_NUMBER(), ERROR_MESSAGE(), 'FALSE' )
END CATCH    

这是我的代码。现在,在执行此操作之后,通过导航到SQL Server中的对象资源管理器并右键单击过程名称并执行它,通过从我们那里获取输入参数值,它会创建以下代码并完美地执行它。

DECLARE @return_value INT,
        @def VARCHAR(100),
        @ghi VARCHAR(100),
        @message NVARCHAR(100)

EXEC @return_value = [dbo].[xyz] '1111',
            @def = @def OUTPUT,
            @ghi = @ghi OUTPUT,
            @message = @message OUTPUT

SELECT
    @def AS '@def',
    @ghi AS '@ghi' 

实际结果:

    @def   @ghi @message
    123    456

所需结果:

    def    ghi  message
    123    456

我想要的就是从上面的输出中删除该'@'。还是我可以在过程的输出参数中使用别名本身,这样,即使有人通过在SQL Server 2012中的对象资源管理器中右键单击过程名称来执行它并执行它,也可以执行它?

2 个答案:

答案 0 :(得分:0)

可能是执行此操作的更好方法,但是您就来了! (例如在为别名添加“ @”时将其删除?)

DECLARE @title VARCHAR(250)

SET @title = '@badNaming'

SELECT LTRIM(STUFF(@title, 1, 1, ''))

结果:badNaming

我使用stuff函数从第一个字符开始,并用空格替换一个字符。然后使用LTrim函数删除左侧的任何空间。希望这会有所帮助!

答案 1 :(得分:0)

感谢您的评论/答案/想法。最后,我通过将值填充到临时表来解决它。非常感谢! 这就是我所做的。

CREATE PROCEDURE xyz
AS
(@abc NVARCHAR(100),
)
BEGIN

Create #temp
(def Nvarchar(100),
 ghi Nvarchar(100),
Message Nvarchar(100)

  )


BEGIN
 insert into #temp (def, ghi)
   values  (SELECT def, ghi 
    FROM alphabets  WHERE abc = @abc)

END


BEGIN CATCH
IF (ERROR_NUMBER() = 1205)
   BEGIN
   RAISERROR('DEADLOCK', 13, 51)
   END
   ELSE
   SELECT @message  = CONCAT (ERROR_NUMBER(), ERROR_MESSAGE(), 'FALSE' )
END CATCH    

Insert into #temp (message) 
values (@message)

Select * from #temp

END