动态功能问题

时间:2010-08-05 16:01:47

标签: sql tsql sql-server-2008

我正在尝试创建一些动态DDL来构建一个函数,当我运行它时,它一直给我一个错误。我不确定格式的错误是什么....我已经尝试了很多不同的东西,现在只是出于好奇,我想了解如何让它发挥作用。任何意见都非常感谢。

CODE:

DECLARE @SQL nvarchar(max) = 
        'ALTER FUNCTION dbo.GetFiscalDate() 
            RETURNS DATETIME 
         AS 
         BEGIN 
            DECLARE @RESULT DATETIME
            SELECT @RESULT = @FY
            RETURN @RESULT;
         END'
   ,@FY datetime = '01/01/2016'
   ,@ParamDef nvarchar(50) = N'@FY datetime'
exec sp_executesql @SQL,@ParamDef,@FY

给我这个错误:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'FUNCTION'.
Msg 178, Level 15, State 1, Line 7
A RETURN statement with a return value cannot be used in this context.
然而

本守则......有效:

DECLARE
 @FY nvarchar(10) = '01/01/2015'
,@SQL nvarchar(max) 

Select @SQL = 
        'ALTER FUNCTION dbo.GetFiscalDate() 
            RETURNS DATETIME 
         AS 
         BEGIN 
            DECLARE @RESULT DATETIME
            SELECT @RESULT = ' + @FY + '
            RETURN @RESULT;
         END'
exec sp_executesql @SQL

当我想传递params而不是将它们与语句连接时,我对此缺少什么?

像往常一样,我非常感谢所有的投入。

谢谢,

取值

2 个答案:

答案 0 :(得分:0)

参数用于执行计划,以便您可以重用执行计划,而不是在DDL语句中,使用第二种方法

答案 1 :(得分:0)

我没有看到你的字符串中包含对函数的调用。 无论你在字符串中输入什么sql都应该直接在查询窗口中执行,并且更改函数然后列出params就不会这样做。你必须使用正常语法中列出的参数来执行该函数。

为什么不将@FY变量作为参数传递给函数?

我不确定你要做什么,但我不希望你上面描述的方法有用。