2010-08-05 43 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變量作爲參數傳遞給函數?

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