2014-01-26 22 views
0

我試圖製作一個高效的SQL存儲過程來從我的數據庫中檢索用戶數據,但我遇到了一個我似乎無法弄清的語法問題。使用IF EXISTS檢查在SELECT語句中設置輸出參數

基本上,我想在我的SELECT語句中分配我的輸出變量。我也想通過IF EXISTS查看用戶是否真的存在。不幸的是,我似乎無法做到這一點。

這裏是我的方法:

CREATE PROCEDURE [dbo].FindUser(@UserID binary(16), @UserExists bit OUTPUT, @Name 

nvarchar(MAX) OUTPUT) 
AS 
    SET NOCOUNT ON 
    IF EXISTS (SELECT @Name = Name FROM Users WHERE UserID = @UserID) 
    BEGIN 
     SET @UserExists = 1 
    END 
RETURN 

目前,它給了我一個 「@Name近SQL46010 ::語法不正確。」錯誤。 如果我刪除IF EXISTS,語句編譯得很好!

爲什麼IF EXISTS檢查會導致語法錯誤?

回答

4
set @UserExists = 0; 

select @Name = Name, 
     @UserExists = 1 
from Users 
where UserID = @UserID; 
+0

謝謝!現在試試這個.. – Eaton

+0

正是我需要的,謝謝你的回答! – Eaton

0
SET NOCOUNT ON 
IF EXISTS (SELECT 1 FROM Users WHERE UserID = @UserID) 
BEGIN 
    SET @UserExists = 1 
    /* do other stuff here select user name or whatever */ 
END 

如果在users table@UserID記錄選擇1的存在子句和控制將進入BEGIN..END塊將返回true。

+0

我想嘗試設置我的名稱變量的某個地方而不做另一個查詢。 – Eaton

+0

@Eaton Exists只會產生'True'或'False',您無法從中檢索數據。 –

+0

爲什麼選擇投票你會不會發表評論? –