8

Sử dụng Sql Server 2012. Tôi có một thủ tục được lưu trữ và một phần của nó kiểm tra nếu một tên người dùng nằm trong một bảng. Nếu có, trả lại một 1, nếu không, trả về một 2. Đây là mã của tôi:SQL Server IF EXISTS THEN 1 ELSE 2

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 1 else 2 

Tuy nhiên, tôi tiếp tục nhận được các lỗi dưới đây:

Incorrect syntax near '1'.

Đây có phải là thậm chí có thể với một IF HIỆN HỮU?

Kính trọng,

Michael

Trả lời

13

Nếu bạn phải làm theo cách này thì đây là cú pháp bạn đang sau;

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
BEGIN 
    SELECT 1 
END 
ELSE 
BEGIN 
    SELECT 2 
END 

Bạn không thực sự cần các tuyên bố BEGIN..END nhưng có lẽ tốt nhất nên tham gia thói quen đó ngay từ đầu.

+1

Rất cám ơn, tôi đã đi với giải pháp của bạn và nó hoạt động. – Michael

2

Bạn có thể định nghĩa một biến @Result để điền dữ liệu của bạn trong nó

DECLARE @Result AS INT 

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') 
SET @Result = 1 
else 
SET @Result = 2 
3

gì đầu ra mà bạn cần, select hoặc print hoặc .. vân vân.

vì vậy sử dụng đoạn mã sau:

IF EXISTS (SELECT * FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx') select 1 else select 2 
1

Trong SQL mà không SELECT bạn không có thể dẫn đến bất cứ điều gì. Thay vì IF-ELSE khối Tôi thích sử dụng CASE tuyên bố này

SELECT CASE 
     WHEN EXISTS (SELECT 1 
         FROM tblGLUserAccess 
         WHERE GLUserName = 'xxxxxxxx') THEN 1 
     ELSE 2 
     END 
1

Làm thế nào về việc sử dụng IIF?

SELECT IIF (EXISTS (SELECT 1 FROM tblGLUserAccess WHERE GLUserName ='xxxxxxxx'), 1, 2) 

Ngoài ra, nếu sử dụng EXISTS để kiểm tra tính tồn tại của hàng, không sử dụng *, chỉ cần sử dụng 1. Tôi tin rằng nó có chi phí thấp nhất.

+0

Sử dụng "SELECT *" so với "SELECT 1" hoặc "SELECT 0" với EXISTS không có sự khác biệt về chi phí trong SQL Server. Thêm một vấn đề ưu tiên. –

Các vấn đề liên quan