所以,我试图编写一个函数,根据输入数字的长度,调用另一个函数。
显示的两个函数都返回一个表。
编写以下查询时没有问题,但是,只要我尝试将其移动到函数中(没有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
);
将来我会以这种方式打电话给其他功能,所以,我现在想要掌握一个基本的两个案例选择......有人可以帮我解决这个问题吗?
提前致谢!
答案 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