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 सर्वर CE 4.0 प्रदर्शन तुलना

  2. मैं SQL सर्वर में कॉलम से गैर-ब्रेकिंग रिक्त स्थान कैसे हटा सकता हूं?

  3. एसएसआईएस फॉरएच लूप - लूप के अंदर कनेक्शन बदलें

  4. SQL सर्वर - एक गणना कॉलम पर अनुक्रमणिका?

  5. चर निर्दिष्ट करते समय सेट बनाम चयन करें?