使用函数作为参数执行存储过程的时候? [重复] 使用函数作为参数执行存储过程的时候? [重复]

2019-05-11 22:16发布

这个问题已经在这里有一个答案:

  • 不正确的语法附近“)”调用存储过程与GETDATE 2回答

我测试的存储过程,并希望提交“GETDATE()”函数来代替参数:

DECLARE @return_value int

EXEC @return_value = my_stored_procedure
        @MyId = 1,
        @MyDateField = GETDATE()

SELECT  'Return Value' = @return_value
GO

SQL Server 2005中有以下错误抱怨:

不正确的语法附近“)”。

有人关心摆脱对此事的一些轻?

Answer 1:

每MSDN

Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
    { 
      [ @return_status = ]
      { module_name [ ;number ] | @module_name_var } 
        [ [ @parameter = ] { value 
                           | @variable [ OUTPUT ] 
                           | [ DEFAULT ] 
                           }
        ]
      [ ,...n ]
      [ WITH RECOMPILE ]
    }
[;]

    Execute a character string
    { EXEC | EXECUTE } 
        ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
        [ AS { LOGIN | USER } = ' name ' ]
    [;]

    Execute a pass-through command against a linked server
    { EXEC | EXECUTE }
        ( { @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ]
            [ { , { value | @variable [ OUTPUT ] } } [ ...n ] ]
        ) 
        [ AS { LOGIN | USER } = ' name ' ]
        [ AT linked_server_name ]
    [;]

通告@parameter您可以指定一个值或一个变量或指定默认值。 所以,你一定要设置一个变量为GETDATE()(如其他人指定)的值,并使用该变量。

HTH



Answer 2:

你不能直接使用函数作为存储过程的参数。

你可以做到以下几点:

DECLARE @now DateTime
SET @now = GETDATE()

DECLARE @return_value int
EXEC @return_value = my_stored_procedure
        @MyId = 1,
        @MyDateField = @now
SELECT  'Return Value' = @return_value
GO


Answer 3:

函数调用的参数不允许(除了那些前缀系统功能@@ -即那些曾经被称为全局变量)

您需要分配给一个变量。

微软承认这是小于这个连接相关大项目: T-SQL:使用标量函数作为存储过程的参数

同意! 更一般地,无论TSQL预计,再说了,整数值,它应该接受一个文字,一个变量,或者其返回类型为整数的函数的结果。 它只是使语言更经常(“正交”),并更容易学习/使用。

这就是说,它是在卡特迈发布此功能为时已晚,但我把它添加到我们的TODO列表。



Answer 4:

你可以使用

DECLARE @test DATE;
SET @test = GETDATE();

然后

DECLARE @return_value int
EXEC @return_value = my_store procedure
        @MyId = 1,
        @MyDateField = @test
SELECT  'Return Value' = @return_value
GO


Answer 5:

尝试:

DECLARE @return_value int
EXEC @return_value = my_store procedure
        @MyId = 1,
        @MyDateField = (SELECT GETDATE())
SELECT  'Return Value' = @return_value
GO


Answer 6:

为什么你需要在GETDATE通过()。 只需在调用的存储过程中使用它。

你不能直接传递进去。 只要将它分配给一个变量,并传递

DECLARE @dt as datetime
SET @dt=GETDATE()

EXEC @return_value = my_store procedure
        @MyId = 1,
        @MyDateField = dt


文章来源: Using function as a parameter when executing a stored procedure? [duplicate]