带有命名参数和计算的存储过程

时间:2016-06-20 02:15:10

标签: sql-server database tsql stored-procedures named-parameters

我正在使用命名参数调用存储过程。

exec MySP @name = 'binesh', @amount = @amt, @date = @date

这对我来说很好。

但是当我在尝试

exec MySP2 @name = 'binesh', @amount = -@amt, @date = @date

exec MySP3 @name = 'binesh', @amount = @amt, @date = convert(varchar(25), @date, 131)

我收到语法错误。

这是强制性的,我需要为每个变量创建单独的变量(常识告诉它不会是这样)。那么这个语法是什么?

全部谢谢

Binesh

2 个答案:

答案 0 :(得分:3)

你不能构建输入" in-line"用于存储过程。您必须在使用之前解决输入。

例如,您需要执行类似的操作(以及解析其他参数)...

declare
    @date varchar(25) = convert(varchar(25), @date, 131);

exec MySP3 @name = 'binesh', @amount = @amt, @date = @date;

答案 1 :(得分:2)

我认为由于程序数据类型,你无法做到这一点。我想@amount在过程参数中是int和@date varchar(25)。如果@date是varchar你不能直接把@ date = convert(varchar(25),@ date,131)。使用相同的类型变量进行转换。我的建议是

declare @amt INT= 100; --some value
set @amt = @amt * -1;
declare @date DATE = getdate(); -- some date
declare @date2 VARCHAR(25);
set @date2 = convert(varchar(25),@date,131); --convert to varchar
exec MySP3 @name='binesh', @amount = @amt,@date=@date2