在函数

时间:2017-03-28 10:56:59

标签: sql-server

我有一个包含多个模块的数据库。我正在处理的模块使用与其余模块不同的开始日期。在我的模块中,我需要在某一点上做一些依赖于一周的第一天的计算,所以在我创建的函数中进行我尝试的计算SET DATEFIRST,正如我发现的那样,并没有工作。为了灭火,我把SET DATEFIRST放在函数调用之外,但现在我正在重构,我想要一个更好的选择。关于该主题的所有其他讨论要么将其设置在函数之外,要么将逻辑更改为不依赖于它。问题是,将它设置在函数之外会破坏函数的目的并且改变逻辑不一定简单,就像我做的那样,它需要依赖特定的一天作为一周的第一天(它不一定只有一行需要依赖它)。此外,逻辑已经相对复杂(这是它的一个功能而不是SP中的内联代码的部分原因)因此以这种方式重写它既容易出错又难以阅读并在需要时更改所以我是寻找更好的选择。

因此,在用户定义的函数中使用不同的DATEFIRST是否有更好的替代方法:

  • 在函数
  • 之外调用SET DATEFIRST
  • 重写逻辑不依赖它?

我认为答案是否定的,但我想知道是否有人有想法。

1 个答案:

答案 0 :(得分:2)

如果使用存储过程替换UDF,则不会有使用SET DATEFIRST的限制。

您可以使用OUTPUT参数捕获另一个存储过程的输出,如上面的注释中所述,或使用此结构:

INSERT INTO @SomeTableVariableOrTempTable (Col1, Col2, ... ColN)
EXEC MyStoredProcedure;