2014-03-25 102 views
1

我是新來的,並且在這個sql函數中有點困難。 我想在sql中創建一個函數,但它不工作,它接受@A int的參數和@B int 返回一個「位」的數據類型。試圖檢查@A int或@B INT表中的列C和D.如果存在 返回1,否則爲0SQL函數來檢查表中任一列是否存在任何值

這裏存在一個值是我的代碼

CREATE FUNCTION fn_exist(
@A int, @B int 
) 
RETURNS bit 
as 
begin 

Declare @year int 
    select @year as [year] 
    case [YEAR] when @A in (C or D) 
    or @B in (C and D) 
    then 1 else 0 
    from dbo.mytable 
    return @year 

end 
+0

你說 「存在」 C和D但是看着你的代碼,你檢查值是在C和D之間 – Magnus

+0

我改成了in,那個也沒有工作 – user3347312

+0

你有'in(C or D)'然後'in(C and D)',既不其中有效的'IN'語法。 – LittleBobbyTables

回答

1

看着你的代碼示例我想你想是這樣的:

DECLARE @value AS BIT 
IF EXISTS(
    SELECT NULL 
    FROM dbo.mytable 
    WHERE (@A = C OR @A = D) OR (@B = C OR @B = D) 
) 
    SET @value = CAST(1 As bit) 
ELSE 
    SET @value = CAST(0 As bit) 

RETURN @value 
+0

感謝您的幫助,但它仍然無效,給我所有以下錯誤:Msg 156,Level 15,State 1,Procedure fn_exists,Line 30 關鍵字'CASE'附近的語法不正確。 Msg 156,Level 15,State 1,Procedure fn_exists,Line 35 關鍵字'THEN'附近的語法錯誤。 消息137,級別15,狀態1,過程fn_exists,行36 必須聲明標量變量「@value」。 消息137,級別15,狀態1,過程fn_exists,行38 必須聲明標量變量「@value」。 消息137,級別15,狀態2,過程fn_exists,行40 必須聲明標量變量「@value」。 – user3347312

+0

SQL將不會採取選擇外 – user3347312

+0

@ user3347312好的情況下,應該是一個'如果'而不是'案件' – Magnus

2

試試這個:在列

Declare @value as bit 

select @value = 
case 
    when exists(
     select 1 
     from dbo.mytable 
     where (@A = C OR @A = D) OR (@B = C OR @B = D) 
    ) 
    then 1 else 0 
end 

return @value 
相關問題