Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Lost in SP!

Postades av 2004-03-23 10:54:18 - Patrik Ahlberg, i forum sql-server/msde, Tråden har 4 Kommentarer och lästs av 629 personer

Hej alla!
Jag sitter med ett litet problem som jag hoppas att ni kan hjälpa mig med.

Jag har tre tabeller:

Recipients (mottagare)
*RecipientID
CompanyID (fk)
RecipientName
OSv...

RecipientGroups (mottagargrupp)
*RecipientGroupID
CompanyID (fk)
RecipientGroupName
Osv...

Recipients_RecipientGroups (kopplingstabell)
RecipientID
RecipientGroupID

Dessutom har jag en Userstabell och en Companytabell. En User kan ha Ett Company.
Nu håller jag på med en delete stored procedure som heter removeUserByID, jag skickar med userID som parameter.
Mellan User och Companytabellen har jag Cascade Delete Related Records men det kan jag inte ha mellan Recipients och Recipients_RecipientGroups och mellan RecipientGroups och Recipients_RecipientGroups.
Anledning till det är att jag får cycle om jag gör så.

Så det jag vill göra nu är att när jag tar bort en användare så ska stored procedure'n först ta bort alla kopplingar mellan Recipients och RecipientGroups och därefter alla Recipients och RecipientGroups.

Men hur ska jag gå tillväga med att göra detta?

Som sagt så skickar jag med UserID som parameter till proceduren och det första jag gör är att deklarera en variabel som hämtar CompanyID från Companies-tabellen.
Jag måste ju ha den eftersom det är CompanyID som är fk i de andra tabellerna.

Men hur ska jag göra härnäst?


Svara

Sv: Lost in SP!

Postades av 2004-03-23 12:19:07 - Pelle Johansson

När jag läste detta lite snabbt så försöker du göra något som inte är tillåtet. Du försöker ta bort en användare och all information rörande denna användare men datat är kopplat till företag och inte användare. Det låter därmed helt fel att försöka ens tillåta en sådan radering.

Men om RecieptID är samma sak som användarens id då är det en annan femma för då har du ju i alla fall identifierade poster kopplade till en användare och inte till företag. Men som sagt, jag läste lite snabbt så förklara dig gärna ytterligare.

En vanlig rutin för en sp är i stil med

<info>
create proc...
@userid int
as
set nocount on

begin tran

delete from underundertabell where ....
delete from undertabell where ....
delete from tabell where ....

if (@@error <> 0)
rollback tran

commit tran
</info>


Svara

Sv: Lost in SP!

Postades av 2004-03-23 12:22:46 - Patrik Ahlberg

Jo informationen är kopplat till företaget eftersom jag har flera användartyper. En av typerna är just företag.

Jag har börjat lite här:

<code>CREATE PROCEDURE removeUserByID
@UserID int
AS

DECLARE @CompanyID AS Integer
SET @CompanyID = 0
SET @CompanyID = (SELECT CompanyID FROM Companies WHERE UserID = @UserID)

IF @CompanyID > 0
BEGIN
BEGIN
DELETE Recipients
WHERE CompanyID = @CompanyID
END

BEGIN
DELETE RecipientGroups
WHERE CompanyID = @CompanyID
END

BEGIN
DECLARE @ScheduleID AS Integer
DECLARE @SchedulesCount AS Integer
DECLARE @i AS Integer
SET @ScheduleID = 0
SET @SchedulesCount = 0
SET @i = 0
SET @SchedulesCount = (SELECT Count(ScheduleID) FROM Schedules WHERE CompanyID = @CompanyID)
--WHILE @i <= @SchedulesCount
--BEGIN

--END


END

BEGIN
DELETE Companies
WHERE UserID = @UserID
END
END

DELETE Users
WHERE
UserID = @UserID
GO</code>


Oj, ser att det är lite annat i sp'n jag håller på med.
Jag har alltså schemaläggning med i matchen.. det är den jag håller på med just nu.
Jag måste ju kolla igenom hur många schemaläggningar ett visst företag ha och sen ta bort alla Schedules_Recipients och Schedules_RecipientGroups för ett visst ScheduleID.
Suck.. har börjat på en while-sats som du ser men jag vet inte hur jag ska gå tillväga faktiskt.

Jag har tagit bort alla relationer nu, jag fick en massa fel när jag la in ett nytt företag och blabla :(


Svara

Sv: Lost in SP!

Postades av 2004-03-24 09:24:14 - Kalle Dahlberg

Hej!

Du jobbar i SQL nu, och där är loopar av ondo :)

Du behöver inte loopa igenom dina schedules överhuvudtaget.

BEGIN och END gör ingen som helst nytta i sig själva. De behöver du bara använda om:

-du har en kontrolfunktion såsom IF eller WHILE innan
OCH
-BEGIN och END innesluter mer än ett statement

Kika här för ett förslag på hur du kan göra istället. Är inte hundra procent säker på din databasmodell, så du får ändra själv så att det blir rätt!

<code>

CREATE PROCEDURE removeUserByID
@UserID int
AS

DECLARE @CompanyID AS Integer
SET @CompanyID = 0
SET @CompanyID = (SELECT CompanyID FROM Companies WHERE UserID = @UserID)

IF @CompanyID > 0
BEGIN

DELETE Recipients
WHERE CompanyID = @CompanyID

DELETE RecipientGroups
WHERE CompanyID = @CompanyID

DELETE Schedules_Recipients
FROM schedules
WHERE Schedules_Recipients.ScheduleID=schedules.ScheduleID
AND schedules.CompanyID = @CompanyID

DELETE Schedules_RecipientGroups
FROM schedules
WHERE Schedules_RecipientGroups.ScheduleID=schedules.ScheduleID
AND schedules.CompanyID = @CompanyID

DELETE schedules
WHERE CompanyID = @CompanyID


DELETE Companies
WHERE UserID = @UserID

END

DELETE Users
WHERE
UserID = @UserID
GO
</code>


Svara

Sv: Lost in SP!

Postades av 2004-03-24 10:45:28 - Patrik Ahlberg

Du har fullständigt rätt!
Tack så mycket och tack också till förklaringen av Begin och End :)


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 620
27 953
271 709
653
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies