sql >> データベース >  >> RDS >> Sqlserver

SQL IF ステートメントが無視されています

    マーティンは間違いなく何かに夢中でした。 IF の中のもの 解析時にパーサーによって処理され、 IF かどうかを無視します パンアウトします。これは、あなたができないのと同じ理由です:

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

    1 つの回避策は、動的 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. MySQLはNOTNULL制約を無視します

    2. Hibernate-ClassNotFoundException:com.mysql.jdbc.Driver

    3. Workbenchを使用してMSSQLからMySQLに移行するときに、ソースからスキーマリストを取得しない

    4. 1つずつ実行できないcodeigniterで複数のクエリを実行する