2011-01-31 11 views
0

次のsql関数で文字列を入力として受け取り、その文字列がcategoryNameと等しいかどうかをチェックします。if文がtrueの場合と同じように動作させます。それはループから破壊し、それは以下のSQLスクリプトのplzヘルプに新しいイム...私の関数がループする必要if(true)

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 [email protected] 
set @temp_catname=lower(@temp_catname) 
if(@[email protected]_catname) 
begin 
return @temp_catid 
break 
end--end if 

set @[email protected]+1 

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

GO 
+1

句読点を省略すると、入力時に時間が節約されますが、読むときには時間がかかりますいいえ、ちょうど観測を怒らせない –

答えて

0

されていないことを0または1、私はどのように行うことができますを返し、他@temp_catid返し、ちょうどテーブルを検索with 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 
+0

tnxは魅力的に働いています... – Rafay

関連する問題