Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
Kenny Blankenship
Starting Member
25 Posts |
Posted - 2004-10-01 : 20:38:24
|
| I'm not sure where this belongs but, I have 2 sprocs that select and update two to three tables. Periodically one of them will fail because of a resource deadlock. Each sproc executes on 750 to 1000ms interval, they are part of a 'real-time' MES system. When I initially set them up, they failed quite frequently. After running a trace, it seemed that they were taking too long to execute, so I re-wrote them to improve their execution speed. I also added NOLOCK to just about every statement that I could. This reduced the failures from a dozen per hour to a dozen per shift. While I wrote the transactions to tolerate the failures, I am interested in eliminating the failures and better understanding how to avoid this issue. Any suggestions?Thanks in advance, Sean |
|
|
eyechart
Master Smack Fu Yak Hacker
3575 Posts |
Posted - 2004-10-01 : 21:13:27
|
| provide us with DDL for the underlying tables and indexes and views. Are there triggers on any tables? we'll need that DDL too.Please also post the DDL for the sprocs you are having a problem with.We should be able to help you make improvements, we just need to see what you have right now.-ec |
 |
|
|
jen
Master Smack Fu Yak Hacker
4110 Posts |
Posted - 2004-10-02 : 10:44:11
|
| you should determine which one is locking the resources, what resources is being locked, if they're sharing these resources and determine which should be executed first or priority. if there's no sequencing then improve the sprocs and benchmark the running time so that if the sproc exceeds the expected running time, you may want to prevent the other sproc from running or prioritize the sproc. |
 |
|
|
Kenny Blankenship
Starting Member
25 Posts |
Posted - 2004-10-02 : 18:33:39
|
| Thanks for the advice. There are no triggers or views on the tables. I don't have access to the DB at the moment, but I will provide the additional data needed on Monday.I am not a DB admin or developer by trade, so I am a little lost on some of the diagnostic tools available. I ran the trace and it clearly shows the execution times as well as the resource deadlock, but other than that, it seems limited. I put error trapping in the sproc, but when there is a resource deadlock, it occurs when the sproc is called, not during its execution. This kind of baffles me since my sproc is very simple, unless a resource deadlock kills the entire sproc and is not captured by @@error.Hopefully the additional information that I provide on Monday will add clarity to the problem. |
 |
|
|
Kenny Blankenship
Starting Member
25 Posts |
Posted - 2004-10-06 : 07:50:26
|
As promised, here's the code. It's rather lengthy, my apologizes, but repeatative. A little background info, the two procedures query the same table. The table contains product information used to fullfill customer's orders. The customer's orders are released onto a conveyor and automatically loaded onto a pallet for delivery, one big vending machine.CREATE PROCEDURE vp_ReleaseByIntersection @RSID_01 INT OUT, @RSID_02 INT OUT, @RSID_03 INT OUT, @RSID_04 INT OUT, @RSID_05 INT OUT, @RSID_06 INT OUT, @RSID_07 INT OUT, @Size_01 INT OUT, @Size_02 INT OUT, @Size_03 INT OUT, @Size_04 INT OUT, @Size_05 INT OUT, @Size_06 INT OUT, @Size_07 INT OUT, @SKU_01 INT OUT, @SKU_02 INT OUT, @SKU_03 INT OUT, @SKU_04 INT OUT, @SKU_05 INT OUT, @SKU_06 INT OUT, @SKU_07 INT OUT, @PSID_01 INT OUT, @PSID_02 INT OUT, @PSID_03 INT OUT, @PSID_04 INT OUT, @PSID_05 INT OUT, @PSID_06 INT OUT, @PSID_07 INT OUT, @RLID_01 INT OUT, @RLID_02 INT OUT, @RLID_03 INT OUT, @RLID_04 INT OUT, @RLID_05 INT OUT, @RLID_06 INT OUT, @RLID_07 INT OUT, @LRID_01 INT, @LRID_02 INT, @LRID_03 INT, @LRID_04 INT, @LRID_05 INT, @LRID_06 INT, @LRID_07 INT, @Desc_01 VARCHAR(50) OUT, @Desc_02 VARCHAR(50) OUT, @Desc_03 VARCHAR(50) OUT, @Desc_04 VARCHAR(50) OUT, @Desc_05 VARCHAR(50) OUT, @Desc_06 VARCHAR(50) OUT, @Desc_07 VARCHAR(50) OUT, @Request INT, @TriggerMerge BIT OUT, @TriggerDivert BIT OUTASBEGIN DECLARE @PLID INT, @Request_Mask INT, @Trans_Error INT SET @Trans_Error = 0 IF @TriggerMerge = 1 BEGIN SET @Request_Mask = POWER(2, 1) SET @PLID = POWER(2,0) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_01 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_01 = RSID, @SKU_01 = SKU, @Size_01 = SCID, @PSID_01 = PSID, @RLID_01 = CID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_01 = Description FROM tblProductList WHERE SKU = @SKU_01 END IF @RSID_01 = 0 OR @RSID_01 = NULL BEGIN SET @RSID_01 = -1 SET @SKU_01 = -1 SET @Size_01 = -1 SET @PSID_01 = -1 SET @RLID_01 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Merge 1' ) SET @Request_Mask = POWER(2, 2) SET @PLID = POWER(2,1) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_02 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_02 = RSID, @SKU_02 = SKU, @Size_02 = SCID, @PSID_02 = PSID, @RLID_02 = CID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_02 = Description FROM tblProductList WHERE SKU = @SKU_02 END IF @RSID_02 = 0 OR @RSID_02 = NULL BEGIN SET @RSID_02 = -1 SET @SKU_02 = -1 SET @Size_02 = -1 SET @PSID_02 = -1 SET @RLID_02 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Merge 2' ) SET @Request_Mask = POWER(2, 3) SET @PLID = POWER(2,2) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_03 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_03 = RSID, @SKU_03 = SKU, @Size_03 = SCID, @PSID_03 = PSID, @RLID_03 = CID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_03 = Description FROM tblProductList WHERE SKU = @SKU_03 END IF @RSID_03 = 0 OR @RSID_03 = NULL BEGIN SET @RSID_03 = -1 SET @SKU_03 = -1 SET @Size_03 = -1 SET @PSID_03 = -1 SET @RLID_03 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Merge 3' ) SET @Request_Mask = POWER(2, 4) SET @PLID = POWER(2,3) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_04 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_04 = RSID, @SKU_04 = SKU, @Size_04 = SCID, @PSID_04 = PSID, @RLID_04 = CID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_04 = Description FROM tblProductList WHERE SKU = @SKU_04 END IF @RSID_04 = 0 OR @RSID_04 = NULL BEGIN SET @RSID_04 = -1 SET @SKU_04 = -1 SET @Size_04 = -1 SET @PSID_04 = -1 SET @RLID_04 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Merge 4' ) SET @Request_Mask = POWER(2, 5) SET @PLID = POWER(2,4) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_05 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_05 = RSID, @SKU_05 = SKU, @Size_05 = SCID, @PSID_05 = PSID, @RLID_05 = CID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_05 = Description FROM tblProductList WHERE SKU = @SKU_05 END IF @RSID_05 = 0 OR @RSID_05 = NULL BEGIN SET @RSID_05 = -1 SET @SKU_05 = -1 SET @Size_05 = -1 SET @PSID_05 = -1 SET @RLID_05 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Merge 5' ) SET @Request_Mask = POWER(2, 6) SET @PLID = POWER(2,5) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_06 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_06 = RSID, @SKU_06 = SKU, @Size_06 = SCID, @PSID_06 = PSID, @RLID_06 = CID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_06 = Description FROM tblProductList WHERE SKU = @SKU_06 END IF @RSID_06 = 0 OR @RSID_06 = NULL BEGIN SET @RSID_06 = -1 SET @SKU_06 = -1 SET @Size_06 = -1 SET @PSID_06 = -1 SET @RLID_06 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Merge 6' ) SET @Request_Mask = POWER(2, 7) SET @PLID = POWER(2,6) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_07 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_07 = RSID, @SKU_07 = SKU, @Size_07 = SCID, @PSID_07 = PSID, @RLID_07 = CID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_07 = Description FROM tblProductList WHERE SKU = @SKU_07 END IF @RSID_07 = 0 OR @RSID_07 = NULL BEGIN SET @RSID_07 = -1 SET @SKU_07 = -1 SET @Size_07 = -1 SET @PSID_07 = -1 SET @RLID_07 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Merge 7' ) SET @TriggerMerge = 0 END IF @TriggerDivert = 1 BEGIN SET @Request_Mask = POWER(2, 1) SET @PLID = POWER(2,16) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_01 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_01 = RSID, @SKU_01 = SKU, @Size_01 = SCID, @PSID_01 = PSID, @RLID_01 = DID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_01 = Description FROM tblProductList WHERE SKU = @SKU_01 END IF @RSID_01 = 0 OR @RSID_01 = NULL BEGIN SET @RSID_01 = -1 SET @SKU_01 = -1 SET @Size_01 = -1 SET @PSID_01 = -1 SET @RLID_01 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Divert 1' ) SET @Request_Mask = POWER(2, 2) SET @PLID = POWER(2,17) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_02 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_02 = RSID, @SKU_02 = SKU, @Size_02 = SCID, @PSID_02 = PSID, @RLID_02 = DID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_02 = Description FROM tblProductList WHERE SKU = @SKU_02 END IF @RSID_02 = 0 OR @RSID_02 = NULL BEGIN SET @RSID_02 = -1 SET @SKU_02 = -1 SET @Size_02 = -1 SET @PSID_02 = -1 SET @RLID_02 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Divert 2' ) SET @Request_Mask = POWER(2, 3) SET @PLID = POWER(2,18) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_03 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_03 = RSID, @SKU_03 = SKU, @Size_03 = SCID, @PSID_03 = PSID, @RLID_03 = DID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_03 = Description FROM tblProductList WHERE SKU = @SKU_03 END IF @RSID_03 = 0 OR @RSID_03 = NULL BEGIN SET @RSID_03 = -1 SET @SKU_03 = -1 SET @Size_03 = -1 SET @PSID_03 = -1 SET @RLID_03 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Divert 3' ) SET @Request_Mask = POWER(2, 4) SET @PLID = POWER(2,19) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_04 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_04 = RSID, @SKU_04 = SKU, @Size_04 = SCID, @PSID_04 = PSID, @RLID_04 = DID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_04 = Description FROM tblProductList WHERE SKU = @SKU_04 END IF @RSID_04 = 0 OR @RSID_04 = NULL BEGIN SET @RSID_04 = -1 SET @SKU_04 = -1 SET @Size_04 = -1 SET @PSID_04 = -1 SET @RLID_04 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Divert 4' ) SET @Request_Mask = POWER(2, 5) SET @PLID = POWER(2,20) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_05 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_05 = RSID, @SKU_05 = SKU, @Size_05 = SCID, @PSID_05 = PSID, @RLID_05 = DID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_05 = Description FROM tblProductList WHERE SKU = @SKU_05 END IF @RSID_05 = 0 OR @RSID_05 = NULL BEGIN SET @RSID_05 = -1 SET @SKU_05 = -1 SET @Size_05 = -1 SET @PSID_05 = -1 SET @RLID_05 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Divert 5' ) SET @Request_Mask = POWER(2, 6) SET @PLID = POWER(2,21) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_06 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_06 = RSID, @SKU_06 = SKU, @Size_06 = SCID, @PSID_06 = PSID, @RLID_06 = DID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0))) SELECT @Desc_06 = Description FROM tblProductList WHERE SKU = @SKU_06 END IF @RSID_06 = 0 OR @RSID_06 = NULL BEGIN SET @RSID_06 = -1 SET @SKU_06 = -1 SET @Size_06 = -1 SET @PSID_06 = -1 SET @RLID_06 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Divert 6' ) SET @Request_Mask = POWER(2, 7) SET @PLID = POWER(2,22) UPDATE tblReleaseSequencing SET PLID = (PLID|@PLID) WHERE RSID = @LRID_07 IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_07 = RSID, @SKU_07 = SKU, @Size_07 = SCID, @PSID_07 = PSID, @RLID_07 = DID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (MDID & @PLID <> 0) AND (PLID & @PLID = 0) AND (Released = 0) AND (DID = 101 OR DID = 201) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (PLID & @PLID = 0) AND (DID = 101 OR DID = 201 OR DID = 1))) SELECT @Desc_07 = Description FROM tblProductList WHERE SKU = @SKU_07 END IF @RSID_07 = 0 OR @RSID_07 = NULL BEGIN SET @RSID_07 = -1 SET @SKU_07 = -1 SET @Size_07 = -1 SET @PSID_07 = -1 SET @RLID_07 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByIntersection - Divert 7' ) SET @TriggerDivert = 0 ENDENDGOCREATE PROCEDURE vp_ReleaseByCell @SKU_01 INT OUT, @SKU_02 INT OUT, @SKU_03 INT OUT, @SKU_04 INT OUT, @SKU_05 INT OUT, @SKU_06 INT OUT, @SKU_07 INT OUT, @SKU_08 INT OUT, @SKU_09 INT OUT, @SKU_10 INT OUT, @RSID_01 INT OUT, @RSID_02 INT OUT, @RSID_03 INT OUT, @RSID_04 INT OUT, @RSID_05 INT OUT, @RSID_06 INT OUT, @RSID_07 INT OUT, @RSID_08 INT OUT, @RSID_09 INT OUT, @RSID_10 INT OUT, @PT_01 INT OUT, @PT_02 INT OUT, @PT_03 INT OUT, @PT_04 INT OUT, @PT_05 INT OUT, @PT_06 INT OUT, @PT_07 INT OUT, @PT_08 INT OUT, @PT_09 INT OUT, @PT_10 INT OUT, @TID_01 INT OUT, @TID_02 INT OUT, @TID_03 INT OUT, @TID_04 INT OUT, @TID_05 INT OUT, @TID_06 INT OUT, @TID_07 INT OUT, @TID_08 INT OUT, @TID_09 INT OUT, @TID_10 INT OUT, @LRID_01 INT, @LRID_02 INT, @LRID_03 INT, @LRID_04 INT, @LRID_05 INT, @LRID_06 INT, @LRID_07 INT, @LRID_08 INT, @LRID_09 INT, @LRID_10 INT, @Desc_01 VARCHAR(50) OUT, @Desc_02 VARCHAR(50) OUT, @Desc_03 VARCHAR(50) OUT, @Desc_04 VARCHAR(50) OUT, @Desc_05 VARCHAR(50) OUT, @Desc_06 VARCHAR(50) OUT, @Desc_07 VARCHAR(50) OUT, @Desc_08 VARCHAR(50) OUT, @Desc_09 VARCHAR(50) OUT, @Desc_10 VARCHAR(50) OUT, @Request INT, @Trigger BIT OUTASBEGIN DECLARE @PLID INT, @Request_Mask INT, @LRID INT, @Trans_Error INT, @TowerDesc VARCHAR(4), @Product VARCHAR(30) SET @Trans_Error = 0 SET @PLID = POWER(2,30) SET @Request_Mask = POWER(2,1) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_01 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_01 = RSID, @SKU_01 = SKU, @PT_01 = PTID, @TID_01 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 1) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 1) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_01 AND CID = 1 AND TID = @TID_01 SET @Desc_01 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_01 > 100) SET @PT_01 = (@PT_01 - 100) END IF @RSID_01 = 0 OR @RSID_01 = NULL BEGIN SET @RSID_01 = -1 SET @SKU_01 = -1 SET @PT_01 = -1 SET @TID_01 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 1' ) SET @Request_Mask = POWER(2,2) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_02 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_02 = RSID, @SKU_02 = SKU, @PT_02 = PTID, @TID_02 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 2) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 2) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_02 AND CID = 2 AND TID = @TID_02 SET @Desc_02 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_02 > 100) SET @PT_02 = (@PT_02 - 100) END IF @RSID_02 = 0 OR @RSID_02 = NULL BEGIN SET @RSID_02 = -1 SET @SKU_02 = -1 SET @PT_02 = -1 SET @TID_02 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 2' ) SET @Request_Mask = POWER(2,3) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_03 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_03 = RSID, @SKU_03 = SKU, @PT_03 = PTID, @TID_03 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 3) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 3) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_03 AND CID = 3 AND TID = @TID_03 SET @Desc_03 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_03 > 100) SET @PT_03 = (@PT_03 - 100) END IF @RSID_03 = 0 OR @RSID_03 = NULL BEGIN SET @RSID_03 = -1 SET @SKU_03 = -1 SET @PT_03 = -1 SET @TID_03 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 3' ) SET @Request_Mask = POWER(2,4) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_04 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_04 = RSID, @SKU_04 = SKU, @PT_04 = PTID, @TID_04 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 4) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 4) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_04 AND CID = 4 AND TID = @TID_04 SET @Desc_04 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_04 > 100) SET @PT_04 = (@PT_04 - 100) END IF @RSID_04 = 0 OR @RSID_04 = NULL BEGIN SET @RSID_04 = -1 SET @SKU_04 = -1 SET @PT_04 = -1 SET @TID_04 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 4' ) SET @Request_Mask = POWER(2,5) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_05 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_05 = RSID, @SKU_05 = SKU, @PT_05 = PTID, @TID_05 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 5) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 5) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_05 AND CID = 5 AND TID = @TID_05 SET @Desc_05 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_05 > 100) SET @PT_05 = (@PT_05 - 100) END IF @RSID_05 = 0 OR @RSID_05 = NULL BEGIN SET @RSID_05 = -1 SET @SKU_05 = -1 SET @PT_05 = -1 SET @TID_05 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 5' ) SET @Request_Mask = POWER(2,6) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_06 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_06 = RSID, @SKU_06 = SKU, @PT_06 = PTID, @TID_06 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 6) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 6) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_06 AND CID = 6 AND TID = @TID_06 SET @Desc_06 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_06 > 100) SET @PT_06 = (@PT_06 - 100) END IF @RSID_06 = 0 OR @RSID_06 = NULL BEGIN SET @RSID_06 = -1 SET @SKU_06 = -1 SET @PT_06 = -1 SET @TID_06 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 6' ) SET @Request_Mask = POWER(2,7) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_07 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_07 = RSID, @SKU_07 = SKU, @PT_07 = PTID, @TID_07 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 7) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 7) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_07 AND CID = 7 AND TID = @TID_07 SET @Desc_07 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_07 > 100) SET @PT_07 = (@PT_07 - 100) END IF @RSID_07 = 0 OR @RSID_07 = NULL BEGIN SET @RSID_07 = -1 SET @SKU_07 = -1 SET @PT_07 = -1 SET @TID_07 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 7' ) SET @Request_Mask = POWER(2,8) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_08 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_08 = RSID, @SKU_08 = SKU, @PT_08 = PTID, @TID_08 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 8) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 8) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_08 AND CID = 8 AND TID = @TID_08 SET @Desc_08 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_08 > 100) SET @PT_08 = (@PT_08 - 100) END IF @RSID_08 = 0 OR @RSID_08 = NULL BEGIN SET @RSID_08 = -1 SET @SKU_08 = -1 SET @PT_08 = -1 SET @TID_08 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 8' ) SET @Request_Mask = POWER(2,9) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_09 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_09 = RSID, @SKU_09 = SKU, @PT_09 = PTID, @TID_09 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 9) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 9) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_09 AND CID = 9 AND TID = @TID_09 SET @Desc_09 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_09 > 100) SET @PT_09 = (@PT_09 - 100) END IF @RSID_09 = 0 OR @RSID_09 = NULL BEGIN SET @RSID_09 = -1 SET @SKU_09 = -1 SET @PT_09 = -1 SET @TID_09 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 9' ) SET @Request_Mask = POWER(2,10) UPDATE tblReleaseSequencing SET PLID = (PLID | @PLID) WHERE RSID = @LRID_10 -- Check to see if the respective cell is requesting data IF @Request & @Request_Mask = @Request_Mask AND @@ERROR = 0 BEGIN SELECT @RSID_10 = RSID, @SKU_10 = SKU, @PT_10 = PTID, @TID_10 = TID FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 10) AND (PLID & @PLID = 0) AND (Released = 0) AND (RSID = (SELECT MIN(RSID) FROM tblReleaseSequencing WITH (NOLOCK) WHERE (CID = 10) AND (PLID & @PLID = 0))) SELECT @TowerDesc = a.TowerDesc, @Product = b.Description FROM tblLocation a INNER JOIN tblProductList b ON a.SKU = b.SKU WHERE a.SKU = @SKU_10 AND CID = 10 AND TID = @TID_10 SET @Desc_10 = @TowerDesc + ' - ' + @Product -- Package Type correction for wide pallet designation, needed for package type 1 IF (@PT_10 > 100) SET @PT_10 = (@PT_10 - 100) END IF @RSID_10 = 0 OR @RSID_10 = NULL BEGIN SET @RSID_10 = -1 SET @SKU_10 = -1 SET @PT_10 = -1 SET @TID_10 = -1 END IF @@ERROR <> 0 INSERT INTO tblSysEvents VALUES ( GETDATE(),@@ERROR, 'vp_ReleaseByCell - Cell 10' ) -- Reset the correct trigger SET @Trigger = 0ENDGOCREATE TABLE [dbo].[tblReleaseSequencing] ( [RSID] [int] NULL , [RouteNo] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL , [RID] [int] NULL , [PSID] [int] NULL , [TID] [int] NULL , [CID] [int] NULL , [PTID] [int] NULL , [SKU] [int] NULL , [DID] [int] NULL , [PLID] [int] NULL , [Released] [bit] NULL , [SCID] [int] NULL , [MDID] [int] NULL , [FLID] [int] NULL , [TEST] [bit] NULL , [WASPRINTED] [bit] NULL ) ON [PRIMARY]GO |
 |
|
|
jen
Master Smack Fu Yak Hacker
4110 Posts |
Posted - 2004-10-06 : 08:10:39
|
| you're right about being repetitive,simple? no.can you just:1. call the query n-times passing rsid1, rlid1 etc, instead of one time execution?2. or make it set based, save the parameters in a table so you can compare and update by seti'm not sure how others would approach this though... |
 |
|
|
Kenny Blankenship
Starting Member
25 Posts |
Posted - 2004-10-06 : 08:24:18
|
| I originally created a udf and queried it multiple times. Because of the resource locking issue, I started to breakdown my original query to elimiate potential issues. Through trial and error, I found that the sproc executed faster when it did not have to make a udf call. It also reduced the number resource locking events. I would like to go back to the udf, but in the end I will go with whatever works, pretty or not. |
 |
|
|
Kenny Blankenship
Starting Member
25 Posts |
Posted - 2004-10-06 : 08:25:53
|
| If only SQL supported arrays. . . |
 |
|
|
jen
Master Smack Fu Yak Hacker
4110 Posts |
Posted - 2004-10-07 : 04:24:51
|
they might in future versions...we can only hope |
 |
|
|
spirit1
Cybernetic Yak Master
11752 Posts |
Posted - 2004-10-07 : 05:26:52
|
tables are arrays, no?Go with the flow & have fun! Else fight the flow |
 |
|
|
|
|
|
|
|