home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.databases.ms-sqlserver      Notorious Rube Goldberg contraption      19,505 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 18,002 of 19,505   
   Bob Barrows to Hugo Kornelis   
   Re: Select with nulls   
   16 Nov 10 09:55:05   
   
   From: reb01501@NOyahoo.SPAMcom   
      
   Of course you are correct. I failed to read it closely enough.   
      
   Hugo Kornelis wrote:   
   > Hi Tom,   
   >   
   > Bob's answer is not completely correct. If you insert the row, the   
   > lock is kept until the end of the transaction. But without locking   
   > hints and under the default transaction isolation level, the lock used   
   > by the SELECT will be released immediately. So your code does have the   
   > risk of getting vioaltions of the unique constraint on (nUserID,   
   > nEventID, nDocumentID).   
   >   
   > Try this instead:   
   >   
   > DECLARE @OutTab TABLE(ImageID int);   
   > DECLARE @ImageID int;   
   > BEGIN TRANSACTION;   
   > BEGIN TRY;   
   >   INSERT INTO Image (columns)   
   >   OUTPUT ImageID INTO @OutTab   
   >   SELECT (columns)   
   >   WHERE NOT EXISTS (see previous post);   
   >   IF @@ROWCOUNT = 0   
   >   BEGIN;   
   >     SELECT @ImageID = ImageID   
   >     FROM   Image   
   >     WHERE  you know what comes here;   
   >   END;   
   >   ELSE   
   >   BEGIN;   
   >     SELECT @ImageID = ImageID   
   >     FROM   @OutTab;   
   >   END;   
   >   -- Other INSERT statements, using @ImageID.   
   >   COMMIT TRAN;   
   > END TRY   
   > BEGIN CATCH;   
   >   ROLLBACK TRAN;   
   >   RAISERROR ('Descriptive error message', 16, 1);   
   > END;   
   >   
   > Yet another possibility is to not use the table variable and the   
   > output clause, and to make the SELECT @ImageID = ... unconditional;   
   > this will either read the just-inserted row, or the row that already   
   > existed and caused the insert to do nothing.   
      
   --   
   HTH,   
   Bob Barrows   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca