Проблема с динамической функцией - PullRequest
2 голосов
/ 05 августа 2010

Я пытаюсь создать динамический DDL для создания функции, и когда я ее запускаю, она продолжает выдавать ошибку. Я не уверен, что я делаю неправильно с форматом .... Я пробовал много разных вещей, и теперь просто из любопытства я хочу понять, как заставить его работать. Любой вклад приветствуется.

КОД:

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

Что мне не хватает в этом, когда я хочу передать в параметрах вместо того, чтобы объединить их с утверждением?

Как обычно, я очень ценю все материалы.

Спасибо

S

Ответы [ 2 ]

0 голосов
/ 05 августа 2010

Я не вижу, где в вашей строке вы включаете вызов своей функции.Независимо от того, что вы введете в строку, sql должен выполняться непосредственно в окне запроса, и изменение функции и последующее перечисление параметров не сделают этого.Вы должны выполнить функцию с параметрами, перечисленными в их обычном синтаксисе.

Почему бы не передать переменную @FY в качестве параметра в функцию?

Я не уверен, что выпытаясь сделать, но я не ожидаю, что подход, который вы описали выше, сработает.

0 голосов
/ 05 августа 2010

параметры используются в планах выполнения, так что вы можете повторно использовать план выполнения, а не в выражениях DDL, используйте ваш второй подход

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...