2013-07-01 60 views
18
IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y') 

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Z' AND COLUMN_NAME = 'A') 
BEGIN 
    UPDATE [dbo].[X] 
     SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]); 
END  
    GO 

Tôi muốn kết hợp 2 IF confitions và thực hiện cập nhật chỉ khi cả hai đều hài lòng. Có cách nào để tôi có thể câu lạc bộ 2 IF EXISTS không?Làm cách nào tôi có thể sử dụng và điều kiện trong IF EXISTS trong SQL?

Trả lời

35

đơn giản:

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y') 
AND EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Z' AND COLUMN_NAME = 'A') 

BEGIN 
    UPDATE [dbo].[X] 
     SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]); 
END  
GO 
+0

Hoặc, thực sự nhìn vào mã của bạn, nó sẽ làm việc như viết - IF thứ 2 được lồng dưới 1. Chỉ cần thêm các tab :) –

+2

Ngoài ra, bạn nên bao gồm TABLE_SCHEMA trong truy vấn INFORMATION_SCHEMA.COLUMNS của bạn, nếu không bạn sẽ nhận được kết quả sai nếu cùng một tên bảng tồn tại trong một lược đồ khác. –

+0

G, nếu cột A hoặc cột Y không tồn tại hoặc bị xóa thì sao? Tôi gặp lỗi trong trường hợp đó. Msg 207, Cấp 16, Tiểu bang 1, Dòng 5 Tên cột không hợp lệ 'A'. – user811433

6

Không cần phải chọn tất cả các cột bằng cách làm SELECT *. vì bạn đang kiểm tra sự tồn tại của các hàng, hãy thực hiện SELECT 1 để truy vấn nhanh hơn.

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME = 'X' AND COLUMN_NAME = 'Y') 

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME = 'Z' AND COLUMN_NAME = 'A') 

    BEGIN 
     UPDATE [dbo].[X] 
      SET Y= (SELECT inst.[A] FROM [dbo].[Z] s WHERE s.[B] = [dbo].[x].[B]); 
    END  
     GO 
+0

Bạn sẽ không bao giờ nhận được bản ghi từ truy vấn của mình, trừ khi bằng cách nào đó 'TABLE_NAME' có thể là cả hai '' X'' và' 'Z'' cùng một lúc. Lặp lại cho 'COLUMN_NAME'. Ngoài ra, * kể từ khi bạn đang kiểm tra sự tồn tại của hàng, làm SELECT 1 thay vì để làm cho truy vấn nhanh hơn. * SQL Server là thông minh hơn thế. –

+0

vâng ..... hiểu rồi, và phải được thay thế bằng OR? –

+0

Không, sau đó 'UPDATE' sẽ chạy nếu một trong hai' X.Y' hoặc 'Z.A' tồn tại, không phải cả hai. –

0

Thay đổi tiêu đề và mô tả sản phẩm nào

UPDATE `li_categories` 
    SET description = CASE 
    WHEN description = '' THEN CONCAT('optional text ', title, ' optional text') 
    ELSE description 
    END 
WHERE 
id 
Các vấn đề liên quan