我通过声明输出变量编写了一个存储过程,并成功执行了。但是,执行完之后,我不想在输出中使用所谓的“ @”字符。
我正在使用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中的对象资源管理器中右键单击过程名称来执行它并执行它,也可以执行它?
答案 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