2010-08-05 40 views
2

我想创建一些动态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 

时,我想这与我在想什么传递参数而不是将它们与声明连接起来?

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

感谢,

小号

回答

0

参数在执行计划中使用,这样就可以重用执行计划,而不是在DDL语句,用你的第二个方法

+0

甜美感谢您的输入! – scarpacci 2010-08-05 16:23:06

0

我看不出在哪里你的字符串包括对你的函数的调用。 无论你放在你的字符串中的sql都应该直接在查询窗口中执行,并且改变一个函数,然后列出这些参数就不会这样做。您必须使用正常语法中列出的参数来执行该功能。

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

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