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 |
|
JAdauto
Posting Yak Master
160 Posts |
Posted - 2008-07-07 : 09:59:38
|
| I am writing a stored procedure to temporarily turn off the constraint on five tables to update their key field to a different value. However, if the client is on one particular version, they do not have the 5th table yet (they only have four). Instead of writing two different sp's, I would like to write one and handle the exception inside the sp if that is possible, but I cannot figure out how to check to see if the table exists. tblMemberPrePaid_v62 is the table that I need to check if it exists. I have read that there possibility with "IF Exists (Select 1 from tblMemberPrePaid_v62), but I cannot quit figure out the syntax or if that is even the correct way. I cannot find anything that is a function like If Table Exists?? Any thoughts!!Thx,JAdautoset ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER PROCEDURE [dbo].[ctcUpdatePSKAccts] @vs_OldMemberNumber nvarchar (48), @vs_NewMemberNumber nvarchar(48)ASBEGINBEGIN TRANSACTIONAlter table psk64.dbo.tblSales_v62 NOCHECK CONSTRAINT FK_tblSales_v62_tblMember_v62UPDATE psk64.dbo.tblSales_v62Set Acct =@vs_OldMemberNumberWhere Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblSales_v62 CHECK CONSTRAINT FK_tblSales_v62_tblMember_v62 Alter table psk64.dbo.tblMemberAccount_v62 NOCHECK CONSTRAINT FK_tblMemberAccount_tblMember_v62UPDATE psk64.dbo.tblMemberAccount_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMemberAccount_v62 CHECK CONSTRAINT FK_tblMemberAccount_tblMember_v62 Alter table psk64.dbo.tblMemberSmartCard_v62 NOCHECK CONSTRAINT FK_tblMemberSmartCard_v62_tblMember_v62UPDATE psk64.dbo.tblMemberSmartCard_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMemberSmartCard_v62 CHECK CONSTRAINT FK_tblMemberSmartCard_v62_tblMember_v62 Alter table psk64.dbo.tblMbrCreditBook_v62 NOCHECK CONSTRAINT FK_tblMbrCreditBook_v62_tblMember_v62UPDATE psk64.dbo.tblMbrCreditBook_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMbrCreditBook_v62 CHECK CONSTRAINT FK_tblMbrCreditBook_v62_tblMember_v62 Alter table psk64.dbo.tblMemberPrePaid_v62 NOCHECK CONSTRAINT FK_tblMemberPrePaid_v62_tblMember_v62UPDATE psk64.dbo.tblMemberPrePaid_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMemberPrePaid_v62 CHECK CONSTRAINT FK_tblMemberPrePaid_v62_tblMember_v62 COMMIT TRANSACTIONEND |
|
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2008-07-07 : 10:04:50
|
[code]if exists (select * from sys.tables where name = 'tblMemberPrePaid_v62')[/code] KH[spoiler]Time is always against us[/spoiler] |
 |
|
|
JAdauto
Posting Yak Master
160 Posts |
Posted - 2008-07-07 : 10:37:53
|
| Invalid object name 'psk64.dbo.tblMemberPrePaid_v62'.This is the error I am getting when I add that line. Below is what that section looks like now. I do not have a tblMemberPrePaid_v62, so I should not be running this section, or at least that is my goal. Am I doing it incorrectly?Thx so much.if exists (select * from sys.tables where name = 'tblMemberPrePaid_v62')Alter table psk64.dbo.tblMemberPrePaid_v62 NOCHECK CONSTRAINT FK_tblMemberPrePaid_v62_tblMember_v62UPDATE psk64.dbo.tblMemberPrePaid_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMemberPrePaid_v62 CHECK CONSTRAINT FK_tblMemberPrePaid_v62_tblMember_v62 |
 |
|
|
khtan
In (Som, Ni, Yak)
17689 Posts |
Posted - 2008-07-07 : 10:56:54
|
[code]if exists (select * from sys.tables where name = 'tblMemberPrePaid_v62')beginAlter table psk64.dbo.tblMemberPrePaid_v62 NOCHECK CONSTRAINT FK_tblMemberPrePaid_v62_tblMember_v62UPDATE psk64.dbo.tblMemberPrePaid_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMemberPrePaid_v62 CHECK CONSTRAINT FK_tblMemberPrePaid_v62_tblMember_v62end[/code] KH[spoiler]Time is always against us[/spoiler] |
 |
|
|
JAdauto
Posting Yak Master
160 Posts |
Posted - 2008-07-07 : 12:04:33
|
| This works like a charm now! Thanks so much. If I could ask one more favor? I had to build this for mutliple versions for clients who have differet versions of this companies software where one version is missing this table and then also if they had an older version which uses a completely different database. I have modified this sp even more now that I got one working correctly and I am not getting any errors, but would you mind looking briefly at it to see if you see any problems glaring. I suppose I could have written two sp's for the different versions, but I would rather keep in one to maintain if possible. Thanks so much,JAdautoset ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER PROCEDURE [dbo].[ctcUpdatePSKAccts] @vs_OldMemberNumber nvarchar (48), @vs_NewMemberNumber nvarchar(48), @vb_UsePSK64 bitASBEGINBEGIN TRANIf @vb_UsePSK64 = 1if exists (select * from sys.tables where name = 'tblSales_v62')BEGINAlter table psk64.dbo.tblSales_v62 NOCHECK CONSTRAINT FK_tblSales_v62_tblMember_v62UPDATE psk64.dbo.tblSales_v62Set Acct = @vs_OldMemberNumberWhere Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblSales_v62 CHECK CONSTRAINT FK_tblSales_v62_tblMember_v62 ENDif exists (select * from sys.tables where name = 'tblMemberAccount_v62')BEGIN Alter table psk64.dbo.tblMemberAccount_v62 NOCHECK CONSTRAINT FK_tblMemberAccount_tblMember_v62UPDATE psk64.dbo.tblMemberAccount_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMemberAccount_v62 CHECK CONSTRAINT FK_tblMemberAccount_tblMember_v62 ENDif exists (select * from sys.tables where name = 'tblMEmberSmartCard_v62')BEGINAlter table psk64.dbo.tblMemberSmartCard_v62 NOCHECK CONSTRAINT FK_tblMemberSmartCard_v62_tblMember_v62UPDATE psk64.dbo.tblMemberSmartCard_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMemberSmartCard_v62 CHECK CONSTRAINT FK_tblMemberSmartCard_v62_tblMember_v62 ENDif exists (select * from sys.tables where name = 'tblMbrCreditBook_v62')BEGIN Alter table psk64.dbo.tblMbrCreditBook_v62 NOCHECK CONSTRAINT FK_tblMbrCreditBook_v62_tblMember_v62UPDATE psk64.dbo.tblMbrCreditBook_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMbrCreditBook_v62 CHECK CONSTRAINT FK_tblMbrCreditBook_v62_tblMember_v62 ENDif exists (select * from sys.tables where name = 'tblMemberPrePaid_v62')BEGINAlter table psk64.dbo.tblMemberPrePaid_v62 NOCHECK CONSTRAINT FK_tblMemberPrePaid_v62_tblMember_v62UPDATE psk64.dbo.tblMemberPrePaid_v62Set Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk64.dbo.tblMemberPrePaid_v62 CHECK CONSTRAINT FK_tblMemberPrePaid_v62_tblMember_v62 ENDElseif exists (select * from sys.tables where name = 'tblSales')BEGIN Alter table psk5msdesql.dbo.tblSales NOCHECK CONSTRAINT FK_tblSales_tblMemberUPDATE psk5msdesql.dbo.tblSalesSet Acct = @vs_OldMemberNumberWhere Acct = @vs_NewMemberNumberALTER TABLE psk5msdesql.dbo.tblSales CHECK CONSTRAINT FK_tblSales_tblMember ENDif exists (select * from sys.tables where name = 'tblMemberAccount')BEGIN Alter table psk5msdesql.dbo.tblMemberAccount NOCHECK CONSTRAINT FK_tblMemberAccount_tblMemberUPDATE psk5msdesql.dbo.tblMemberAccountSet Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk5msdesql.dbo.tblMemberAccount CHECK CONSTRAINT FK_tblMemberAccount_tblMember ENDif exists (select * from sys.tables where name = 'tblMemberSmartCard')BEGINAlter table psk5msdesql.dbo.tblMemberSmartCard NOCHECK CONSTRAINT FK_tblMemberSmartCard_tblMemberUPDATE psk5msdesql.dbo.tblMemberSmartCardSet Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk5msdesql.dbo.tblMemberSmartCard CHECK CONSTRAINT FK_tblMemberSmartCard_tblMember ENDif exists (select * from sys.tables where name = 'tblMbrCreditBook')BEGINAlter table psk5msdesql.dbo.tblMbrCreditBook NOCHECK CONSTRAINT FK_tblMbrCreditBook_tblMemberUPDATE psk5msdesql.dbo.tblMbrCreditBookSet Acct = @vs_OldMemberNumberWHERE Acct = @vs_NewMemberNumberALTER TABLE psk5msdesql.dbo.tblMbrCreditBook CHECK CONSTRAINT FK_tblMbrCreditBook_tblMember ENDIF @@ERROR <> 0 ROLLBACK TRANElseCOMMIT TRANEND |
 |
|
|
JAdauto
Posting Yak Master
160 Posts |
Posted - 2008-07-08 : 14:17:53
|
| Is this part of my sp correct?IF @@ERROR <> 0 ROLLBACK TRANElseCOMMIT TRANWhen I run this query, I do not get any errors, but when I do a select on my previous number, it still exists. It never updated those tables. I have not worked with transaction processing in a stored procedure before, so I am unsure if I am doing this correctly. Any thoughts?Thx for all your advice,JAdauto |
 |
|
|
|
|
|
|
|