如果(true)则中断并返回@temp_catid

时间:2011-01-31 06:19:51

标签: sql sql-server-2008 scripting sql-scripts

我有一个以下的sql函数,它接受一个字符串作为输入然后检查该单词是否等于categoryName,我希望它表现得像if语句为true时它从循环中断并返回@temp_catid否则它返回0或1我怎么能这样做新的sql脚本plz帮助...下面是我的功能

USE [myDB]
GO

/****** Object:  UserDefinedFunction [dbo].[udfisEqualToCategory]    Script Date: 01/31/2011 10:57:56 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




Create FUNCTION [dbo].[udfisEqualToCategory](@word nvarchar(max))
RETURNS INT

AS
BEGIN
--declare a temp category table for data processing
declare @temptbl_category Table
(
indexx int identity(1,1),
categoryid int,
categoryname nvarchar(max)
)
--insert data from feedcrawler.category into temp category table
insert into @temptbl_category 
select CategoryId,Name
from Category

--declare some variables to hold the data of current row of temp category table being processed while looping

declare @temp_catid int
declare @temp_catname nvarchar(max)
declare @rowcount int
set @rowcount=(select count(indexx)from @temptbl_category)



declare @I int
set @I=1

--print'given string-> '+ @FullName
--print'string length-> '+convert(nvarchar(max),@strlen)
while(@I <= @rowcount)
begin

select @temp_catname=categoryname,@temp_catid=categoryid from @temptbl_category where indexx=@I
set @temp_catname=lower(@temp_catname)
if(@word=@temp_catname) 
begin
return @temp_catid
break
end--end if

set @I=@I+1

END--while loop ends
return 0
end-- function ends

GO

1 个答案:

答案 0 :(得分:0)

无需循环,只需使用WHERE

搜索表格
Create FUNCTION [dbo].[udfisEqualToCategory](@word nvarchar(max))
RETURNS INT
AS
BEGIN
    declare @temp_catid int

    select
        @temp_catid = categoryid
    from
        Category
    WHERE
        LOWER(@word) = LOWER(categoryname);

    --no match = @temp_catid IS NULL. So change to zero
    RETURN ISNULL(@temp_catid, 0);
END
GO