Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Câu lệnh SQL IF đang bị bỏ qua

Martin chắc chắn đã có một cái gì đó. Nội dung bên trong IF đang được trình phân tích cú pháp xử lý tại thời điểm phân tích cú pháp và bỏ qua liệu IF của bạn sẽ lia ra. Đây cũng là lý do bạn không thể làm:

IF 1 = 1
  CREATE TABLE #x(a INT);
ELSE
  CREATE TABLE #x(b INT);

Một cách giải quyết là sử dụng SQL động:

IF EXISTS ...
BEGIN
  BEGIN TRANSACTION;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'
        DELETE FROM [dbo].[Notes]
        WHERE [EntityId] IS NULL 
        AND [EntityType] IS NULL
        --Delete notes where the corresponding contact or account has been deleted.
        OR [ID] IN (9788, 10684, 10393, 10718, 10719)

        --Populate new columns with all existing data
        UPDATE [dbo].[Notes]
        SET [AccountId] = [EntityId]
        WHERE [EntityType] = 1

        UPDATE [dbo].[Notes]
        SET [ContactId] = [EntityId]
        WHERE [EntityType] = 2

        --Delete EntityId and EntityType columns from the Notes table
        ALTER TABLE [dbo].[Notes]
        DROP COLUMN [EntityId], [EntityType]';

    EXEC sp_executesql @sql;

    COMMIT TRANSACTION;
END

Nhưng bạn vẫn nên chắc chắn rằng cả hai cột ở đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cấp quyền cấp bảng trong SQL Server

  2. Cách đổi tên Ràng buộc khóa chính cho nhiều bảng trong cơ sở dữ liệu SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 64

  3. Giới thiệu tính năng Phát lại — Chẩn đoán thời điểm mới cho đám mây Spotlight

  4. Cách nhận giá trị hộp kiểm từ gridview khi hộp kiểm OnCheckedChanged

  5. Cách thực hiện liên kết bên trong trên số hàng trong máy chủ sql