Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Instrukcja SQL IF jest ignorowana

Martin był zdecydowanie na coś. Rzeczy wewnątrz IF jest przetwarzany przez parser w czasie parsowania i ignoruje, czy Twój IF wyjdzie. To jest ten sam powód, dla którego nie możesz tego zrobić:

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

Jednym z obejść byłoby użycie dynamicznego 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

Należy jednak mieć pewność, że oba są tam kolumny.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zaokrąglanie milisekund w T-SQL

  2. SQL:Używanie DATEADD z bigintami

  3. DEGREES() Przykłady w SQL Server

  4. Podłączanie SQL Server do bazy danych Java

  5. Jak wykryć i zapobiec nieoczekiwanemu wzrostowi bazy danych SQL Server TempDB