sql >> Databáze >  >> RDS >> Sqlserver

Příkaz SQL IF je ignorován

Martin určitě na něco šel. Věci uvnitř IF je zpracováván analyzátorem v době analýzy a ignoruje, zda vaše IF vyjede. To je stejný důvod, proč to nemůžete udělat:

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

Jedním z řešení by bylo použití dynamického 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

Ale přesto byste si měli být jisti, že obojí jsou tam sloupce.



  1. Konverze Oracle DBMS_LOB.WRITEAPPEND na Postgres

  2. Funkce Oracle Analytic - resetování klauzule pro vytváření oken

  3. aktualizační tabulku mysql ajax podle třídy

  4. Jak dosáhnu toho, aby se kategorie první úrovně zobrazovala pouze jednou?