【问题标题】:SQL Server function return different select statement based on the parameterSQL Server 函数根据参数返回不同的选择语句
【发布时间】:2012-04-08 02:36:20
【问题描述】:

我需要一个根据参数值返回不同选择语句的函数。我像下面这样写,但它会抛出一个错误,如

不能在此使用带有返回值的 RETURN 语句 上下文。

ALTER FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS TABLE
AS
BEGIN
IF @SampleValue=100
RETURN(
 SELECT ....
)
ELSE
RETURN(
 SELECT ....

)

【问题讨论】:

  • 为什么不从选择中返回值?或者,您可以返回一个表示查询的字符串。
  • 两个 select 语句是否生成具有相同“形状”的结果集? (列数,对于每列,相同的名称和类型)
  • 是的,它们是一样的。唯一的区别是其中一个有一个用于过滤的 WHERE 语句。
  • 我在这里的目的是如果参数带有特定值我需要返回一个没有 WHERE 语句的 select 语句,如果参数的值与这个特定值不同,我需要过滤 select 语句用这个参数。
  • @user1288423 - 如果您想根据参数执行不同的过滤器,您可以简单地解释逻辑并在一个查询中完成。如果做两个查询没问题,那么你可以在下面看到我的答案。

标签: sql sql-server-2008 function


【解决方案1】:

根据您的 cmets - 只需将其写为单个查询 - 无需将其写出两次。

ALTER FUNCTION [dbo].[Sample] (@SampleValue int)
RETURNS TABLE
AS
BEGIN
RETURN(
 SELECT .... WHERE @SampleValue = 100 OR (<rest of where clause from other branch>)
)

【讨论】:

  • 感谢您的回答,它奏效了。这是我的问题的实用解决方案,我不知道我怎么想不到这个=)
猜你喜欢
  • 2014-12-02
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多