sql >> Database >  >> RDS >> Sqlserver

SQL IF-instructie wordt genegeerd

Martin was zeker iets op het spoor. De dingen in de IF wordt tijdens het parseren door de parser behandeld en negeert of uw IF uit zal komen. Dit is dezelfde reden waarom je het niet kunt doen:

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

Een oplossing zou zijn om dynamische SQL te gebruiken:

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

Maar je moet er nog steeds zeker van zijn dat beide kolommen zijn er.



  1. Een back-up maken van MySQL-databases met AutoMySQLBackup

  2. Een gerelateerde groep items selecteren in Oracle SQL

  3. Door komma's gescheiden tekenreeks ontleden om IN Lijst met tekenreeksen in de Where-component te maken

  4. Hoe psql.exe te starten