选择为参数的存储过程

时间:2018-06-11 16:52:05

标签: sql sql-server sql-server-2008

我只想问一个小问题:我有一个名为SP_CARGA_NUEVOS的存储过程。

要使用此存储过程,我需要这种格式的字符串:'AD18010611'

字符串的最后4位数字是当前的月份和日期,所以不是手动更改值,而是编写了这个小查询:

SELECT 
    'AD1801' +  
    CONVERT(VARCHAR(2), GETDATE(), 101) + 
    CONVERT(VARCHAR(2), GETDATE(), 103)

返回AD18010611

但是当我尝试使用存储过程时,出现错误:

  

程序或功能' SP_CARGA_NUEVOS'需要参数' @ COMENTARIO',这是未提供的。

我的问题:有没有办法将select作为参数发送到存储过程?

提前致谢

编辑1:

我这样称呼SP

Exec dbo.SP_CARGA_NUEVOS select 'AD1801'+ convert(varchar(2), GETDATE(), 101) + 
convert(varchar(2), GETDATE(), 103)

哪个不起作用。

正确的方法是:

Exec dbo.SP_CARGA_NUEVOS 'AD18010611'

2 个答案:

答案 0 :(得分:1)

不能EXEC的中间有表达式或选择 - 你需要首先选择你想要用于变量的值,并且然后调用你的存储过程 - 像这样:

DECLARE @Input VARCHAR(20);

SELECT @Input = 'AD1801' +
                CONVERT(VARCHAR(2), GETDATE(), 101) + 
                CONVERT(VARCHAR(2), GETDATE(), 103)

EXEC dbo.SP_CARGA_NUEVOS @Input

答案 1 :(得分:0)

您无法直接使用查询输出调用存储过程,就像您在此处尝试的那样。请注意,在EXECUTE调用语法的描述中,参数用法定义为:

    [ [ @parameter = ] { value   
                       | @variable [ OUTPUT ]   
                       | [ DEFAULT ]   
                       }  

翻译,这表示您可以使用常量值,变量或接受默认值(如果有)。接受查询输出不是一种选择。