2010-08-05 3 views
2

Я пытаюсь создать динамический 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 

Что я отсутствующий с этим, когда я хочу передать в params, а не конкатенировать их с утверждением?

Как обычно, я очень ценю все входные данные.

Спасибо,

S

ответ

0

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

+0

Sweet Спасибо за ввод! – scarpacci

0

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

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

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

Смежные вопросы