【问题标题】:SQL function not working properly, but does when not as a functionSQL 函数无法正常工作,但在不作为函数时会正常工作
【发布时间】:2014-06-01 18:35:19
【问题描述】:

我编写的 SQL 函数遇到了另一个问题。如果我不在函数中运行它并使用声明的变量,那么它可以完美运行。但是一旦我把它放入一个函数并运行它,什么都没有出现,它是空的。

我不能把它放到一个存储过程中,它需要在一个函数中。

代码是

select * from [MYTABLE]
where MajorGroupID = @MajorGroupID
and ((@Status = 0 and (
Inactive = 0)
))
or MajorGroupID = @MajorGroupID and (@Status = 1 and (Inactive = 0 or Inactive = 1))

我对函数不是很熟悉,我可以用函数做一些基本的事情,但是当涉及到向它添加逻辑时。如果允许我使用存储过程,那么我就不会遇到问题。

这是 MSSQL,使用的是 SQL Server 2010。

编辑,添加完整功能

CREATE FUNCTION [dbo].[WT_FN_GET_MYTABLE_By_MajorGroupID_Inactive]
(
@MajorGroupID varchar,
@Status int
)
RETURNS TABLE 
AS
RETURN

select * from [MYTABLE]
where MajorGroupID = @MajorGroupID
and ((@Status = 0 and (
Inactive = 0)
))
or MajorGroupID = @MajorGroupID and (@Status = 1 and (Inactive = 0 or Inactive = 1))

【问题讨论】:

  • 那么创建函数的代码会很方便,不是吗?您正在寻找的是一个表值函数。 technet.microsoft.com/en-us/library/ms191165(v=sql.105).aspx
  • @GSerg,这实际上应该是一个表值函数...我将发布整个函数..
  • 您没有为 varchar 提供长度,因此它将是 1 并且会被截断。
  • @GSerg,在我做出改变之后,它就起作用了。请作为答案发布,以便我接受它
  • 错误,SQL Server 2010,顺便问一下?我一定以某种方式错过了那个版本:-)

标签: sql sql-server function


【解决方案1】:

您没有为@MajorGroupID varchar 提供长度,因此默认情况下它将是1,此时它将在表中找不到任何内容。

提供一个长度,例如@MajorGroupID varchar(30).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-15
    • 2013-03-27
    • 2012-08-15
    • 2013-11-05
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多