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


T-SQL INSERT problem

Postades av 2004-02-09 11:52:34 - Jonas Stenman, i forum databaser, Tråden har 6 Kommentarer och lästs av 959 personer

Hej, undrar om någon kan se om det finns en bättre lösning på detta? Har 2 tabeller i detta scenariot, egentligen fler men tar bara med de 2 första då de andra ska updateras på samma sätt. Första tabellen ska bara ha nya värden till kolumnerna intOrdning och vcharBenamning från inparametrarna, de andra ska ha utöver detta, oxå ha värdet på pri.key från förra tabellen(föregående INSERT) osv. detta för att värdena ska visas i nivåer i en TreeView. Har alltså 2 problem: intOrdning ska få högsta värdet i kolumnen + 1 och tblInkStatusTyp.intHuvudStatusID(for.key) ska få värdet från tblInkHuvudStatus.intHuvudStatusID(pri.key)! Nedan visas vart jag är på väg..medveten om att uppdateringen av intOrdning är helt fel(kan man göra något fiffigt med @@IDENTITY?), men som sagt så söker jag en lösning på detta. Mina t-sql kunkaper är inte enorma som ni kommer att se! Tacksam för hjälp..

CREATE PROCEDURE Ink_addCompleteChain
@hsName As varchar(50),
@stName As varchar(50),
@hkName As varchar(50),

AS
SET NOCOUNT ON
DECLARE @cntHS Int
DECLARE @cntST Int
DECLARE @cntHK Int
DECLARE @hsId Int

SELECT @cntHS = COUNT(intOrdning) FROM tblInkHuvudStatus
BEGIN TRAN
INSERT INTO tblInkHuvudStatus(intOrdning, vcharBenamning) VALUES (@cntHS + 1,@hsName)
/*SELECT @@IDENTITY AS 'Identity' (tänkte använda för att lägga in i nästa tbl på något vis)*/
COMMIT TRAN


SELECT @hsId = intHuvudStatusID FROM tblInkHuvudStatus WHERE intOrdning = @cntHS+1 AND vcharBenamning = @hsName
SELECT @cntST = COUNT(intOrdning) FROM tblInkStatusTyp
BEGIN TRAN
INSERT INTO tblInkStatusTyp(intHuvudStatusID, intOrdning, vcharBenamning) VALUES (@hsId, @cntST+1, @stName)
COMMIT TRAN
GO


Svara

Sv: T-SQL INSERT problem

Postades av 2004-02-09 12:13:16 - Ola Lindfeldt

Hej!

Japp du är på rätt väg..


declare @nID int

INSERT INTO tblInkHuvudStatus(intOrdning, vcharBenamning)
VALUES (5, 'Hej')

SET @nID = @@IDENTITY

ps. Din BEGIN TRAN bör vara innan din select som hör ihop med din insert, annars är den helt onödig.
dd.


Svara

Sv: T-SQL INSERT problem

Postades av 2004-02-09 13:22:22 - Jonas Stenman

Oki, tack för hjälpen.. Så här ser min sp ut nu, verkar funka men får 3 såna här varningar: Warning: Null value is eliminated by an aggregate or other SET operation. Hmm.. Såg inte några NULL i fälten! Vet du/någon hur jag kan hämta/sätta högsta värdet från kolumn intOrdning till värdet + 1? :)

/* Lägger till en hel händelsekedja */
CREATE PROCEDURE Ink_addCompleteChain
@hsName As varchar(50),
@stName As varchar(50),
@hkName As varchar(50),
@hName As varchar(50),
@lockDays As Integer,
@type As Integer
AS
SET NOCOUNT ON
DECLARE @cntHS Int
DECLARE @cntST Int
DECLARE @cntHK Int
DECLARE @cntH Int

DECLARE @hsID Int
DECLARE @stID Int
DECLARE @hkID Int

BEGIN TRAN
SELECT @cntHS = COUNT(intOrdning) FROM tblInkHuvudStatus
INSERT INTO tblInkHuvudStatus(intOrdning, vcharBenamning) VALUES (@cntHS + 1,@hsName)
SET @hsID = @@IDENTITY
COMMIT TRAN

BEGIN TRAN
SELECT @cntST = COUNT(intOrdning) FROM tblInkStatusTyp
INSERT INTO tblInkStatusTyp(intHuvudStatusID, intOrdning, vcharBenamning) VALUES (@hsID, @cntST+1, @stName)
SET @stID = @@IDENTITY
COMMIT TRAN

BEGIN TRAN
SELECT @cntHK = COUNT(intOrdning) FROM tblInkHandelseKedja
INSERT INTO tblInkHandelseKedja(intStatusTypID, intOrdning, vcharBenamning) VALUES (@stID, @cntHK+1, @hkName)
SET @hkID = @@IDENTITY
COMMIT TRAN

BEGIN TRAN
SELECT @cntH = COUNT(intOrdning) FROM tblInkHandelser
INSERT INTO tblInkHandelser(intHandelseKedjaID, intHandelseTypID ,intOrdning, intLasdagar, vcharBenamning) VALUES (@hkID, @type, @cntH+1, @lockDays, @hName)
COMMIT TRAN
GO


Svara

Sv: T-SQL INSERT problem

Postades av 2004-02-09 13:31:00 - Jonas Stenman

Ahh, nu vet jag..TRIVIALT!! MAX(kolumn) FROM tbl

Tack ändå.. Jonas


Svara

Sv: T-SQL INSERT problem

Postades av 2004-02-09 23:18:03 - Ola Lindfeldt

@@identity fungerar bara om kolumnen är av typen identity
dvs den skapar autoamtiskt ett id. Antagligen är den inte det och du fick att @@identity var NULL, därav felet.

Ola


Svara

Sv: T-SQL INSERT problem

Postades av 2004-02-10 08:16:24 - Mikael Wedham

Alla dessa BEGIN TRAN / COMMIT TRAN är väl inte så funktionella...

Är inte din vilja att allt sker, eller inget? Nu delar du upp din PROC i massa små delar, som var och en körs som en egen enhet. Går en fel, så händer inget med de andra...

EXEMPEL:
BEGIN TRAN

SELECT @cntHS = COUNT(intOrdning) FROM tblInkHuvudStatus
--Kan knappast gå fel, Är praktiskt sett inte med i transaktionen eftersom
--låsningen släpper direkt - Kan eventuellt(troligen inte) bli ett problem...
--Däremot hade jag valt att köra en MAX(intOrdning) istället,
--för att inte riskera dubletter om man "råkar" radera en post.
INSERT INTO tblInkHuvudStatus(intOrdning, vcharBenamning) VALUES (@cntHS + 1,@hsName)
--Här kan det gå fel. En felkontroll är på sin plats.
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END

--Om inte din kolumn är en IDENTITY (Automatisk räknare)
--Så löser du problemet såhär:
SET @hsID = @cntHS + 1

--Detta funkar vid IDENTITY...
--SET @hsID = @@IDENTITY

--Denna måste bort, så att transaktionen fortsätter.
--COMMIT TRAN
--och då kan du inte börja en ny, fortsätt bara...
--BEGIN TRAN

SELECT @cntST = COUNT(intOrdning) FROM tblInkStatusTyp
INSERT INTO tblInkStatusTyp(intHuvudStatusID, intOrdning, vcharBenamning) VALUES (@hsID, @cntST+1, @stName)

IF @@error o.s.v...


Svara

Sv: T-SQL INSERT problem

Postades av 2004-02-10 10:28:17 - Jonas Stenman

Tjena grabbar! Tack för all hjälp. Jo, jag vill nog att allt eller inget ska hända och koden ser ut så här nu. Min (pri.key)kolumn som jag hämtar värdet till te x @hsId var från början av typen räknare, så felmedd. berodde kanske på något annat, vet ej. Nu får jag inget felmedd. längre. Ser det rätt ut nu? Tack än en gång killar!

CREATE PROCEDURE Ink_addCompleteChain
@hsName As varchar(50),
@stName As varchar(50),
@hkName As varchar(50),
@hName As varchar(50),
@lockDays As Integer,
@type As Integer
AS
SET NOCOUNT ON
DECLARE @cntHS Int
DECLARE @cntST Int
DECLARE @cntHK Int
DECLARE @cntH Int

DECLARE @hsID Int
DECLARE @stID Int
DECLARE @hkID Int

BEGIN TRAN
SELECT @cntHS = MAX(intOrdning) FROM tblInkHuvudStatus
INSERT INTO tblInkHuvudStatus(intOrdning, vcharBenamning) VALUES (@cntHS + 1,@hsName)
SET @hsID = @@IDENTITY /*intHuvudStatusID är en räknare*/
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END

SELECT @cntST = MAX(intOrdning) FROM tblInkStatusTyp
INSERT INTO tblInkStatusTyp(intHuvudStatusID, intOrdning, vcharBenamning) VALUES (@hsID, @cntST+1, @stName)
SET @stID = @@IDENTITY
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END

SELECT @cntHK = MAX(intOrdning) FROM tblInkHandelseKedja
INSERT INTO tblInkHandelseKedja(intStatusTypID, intOrdning, vcharBenamning) VALUES (@stID, @cntHK+1, @hkName)
SET @hkID = @@IDENTITY
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END

SELECT @cntH = MAX(intOrdning) FROM tblInkHandelser
INSERT INTO tblInkHandelser(intHandelseKedjaID, intHandelseTypID ,intOrdning, intLasdagar, vcharBenamning) VALUES (@hkID, @type, @cntH+1, @lockDays, @hName)
IF @@error <> 0
BEGIN
ROLLBACK TRAN
RETURN
END
COMMIT TRAN
GO


Svara

Nyligen

  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino
  • 04:14 Vad finns det för kratomalternativ
  • 14:16 Indian online casino
  • 14:15 Indian online casino

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 570 878
27 965
271 771
682
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