SQL函数 - 如果语句

时间:2014-11-11 10:36:13

标签: sql function if-statement sql-server-2008-r2

所以,我试图编写一个函数,根据输入数字的长度,调用另一个函数。

显示的两个函数都返回一个表。

编写以下查询时没有问题,但是,只要我尝试将其移动到函数中(没有declare和set语句),我就会出错。也就是说,我必须声明标量变量,@ idNumber" - 但鉴于它是一个参数,怎么样?!

此外,它建议('它是SQL Server Management Studio 2008 R2)IF附近的语法不正确,期待'(',SELECT或WITH

这是我的疑问:

DECLARE @idNumber int;
SET @idNumber = 12534;

IF (@idNumber LIKE '_____')
BEGIN
    SELECT * FROM getBatch(@idNumber);
END
ELSE IF (@idNumber LIKE '____')
BEGIN
    SELECT * FROM getBlend(@idNumber);
END
ELSE
BEGIN
    SELECT 'You absolute melon - get your query right!' AS 'Seriously?'
END

这看起来像一个函数:

CREATE FUNCTION [dbo].[getBxBl] (@idNumber int)
RETURNS TABLE
AS
RETURN
(
    IF (@idNumber LIKE '_____')
    BEGIN
        SELECT * FROM getBatch(@idNumber);
    END
    ELSE IF (@idNumber LIKE '____')
    BEGIN
        SELECT * FROM getBlend(@idNumber);
    END
    ELSE
    BEGIN
        SELECT 'You absolute melon - get your query right!' AS 'Seriously?'
    END
);

将来我会以这种方式打电话给其他功能,所以,我现在想要掌握一个基本的两个案例选择......有人可以帮我解决这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您的函数不仅仅是一个select,那么您需要declare the return table并将代码包装在BEGIN and END中。试试这个..

CREATE FUNCTION [dbo].[Getbxbl] (@idNumber INT)
RETURNS @OuTab TABLE (
  column1 VARCHAR(100))
AS
  BEGIN
      IF ( @idNumber LIKE '_____' )
        BEGIN
            INSERT @OuTab
            SELECT *
            FROM   Getbatch(@idNumber);
        END
      ELSE IF ( @idNumber LIKE '____' )
        BEGIN
            INSERT @OuTab
            SELECT *
            FROM   Getblend(@idNumber);
        END
      ELSE
        BEGIN
            INSERT @OuTab
            SELECT 'You absolute melon - get your query right!' AS 'Seriously?'
        END
  END