Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL операторът IF се игнорира

Мартин определено беше налучкал нещо. Нещата вътре в IF се обработва от анализатора по време на анализ и игнорира дали вашият IF ще излезе. Това е същата причина, поради която не можете да правите:

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

Едно заобиколно решение би било използването на динамичен SQL:

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

Но все пак трябва да сте сигурни, че и двете колони има.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Статистика за обекти на базата данни на SQL Server

  2. Създаване на изгледи само за четене в Sql Server

  3. Не може да се вмъкне null в datetime в sql сървър

  4. SQL Datediff - намиране на datediff между редовете

  5. SQL актуализация с row_number()