我正在尝试创建一些动态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而不是将它们与语句连接时,我对此缺少什么?
像往常一样,我非常感谢所有的投入。
谢谢,
取值
答案 0 :(得分:0)
参数用于执行计划,以便您可以重用执行计划,而不是在DDL语句中,使用第二种方法
答案 1 :(得分:0)
我没有看到你的字符串中包含对函数的调用。 无论你在字符串中输入什么sql都应该直接在查询窗口中执行,并且更改函数然后列出params就不会这样做。你必须使用正常语法中列出的参数来执行该函数。
为什么不将@FY变量作为参数传递给函数?
我不确定你要做什么,但我不希望你上面描述的方法有用。