webForumDet fria alternativet

Hämta och uppdatera värden samtidigt

Databaser & SQL

4 svar · 442 visningar · startad av Per

Medlem sedan dec. 1999503 inlägg
Frågan#1

Hej!

Jag har en databas (se bifogad fil) bestående utav tre tabeller; main, misc och tempADUser. Tabellen tempADUser är helt fristående men kolumnen ipPhone har samma värde som telno i main.

Vad jag vill uppnå är att för varje post i ipPhone vilja jag skapa två poster i misc, där misc.recno är samma som main.record_id, misc.miscno är 8 respektive 15 och misc.mtext är tempADUser.ipPhone respektive tempADUser.extensionAttribute1.

Exempel på innehåll:
main: 1, 1234
tempADUser: 1234, A, B

Resultat:
misc: 1, 8, A
misc: 1, 15, B

Lite rörigt, men jag hoppas ni förstår :)

DB är MSSQL 2008 R2

Medlem sedan aug. 20039 340 inlägg
#2

Du får dela upp det i två frågor:

INSERT INTO misc (recno, miscno, text)
SELECT main.record_id AS recno, 8 AS misc.miscno, tempADUser.ipPhone
FROM tempADUser 
INNER JOIN main ON main.telno = tempADUser.ipPhone;

INSERT INTO misc (recno, miscno, text)
SELECT main.record_id AS recno, 15 AS misc.miscno, tempADUser.extensionAttribute1
FROM tempADUser 
INNER JOIN main ON main.telno = tempADUser.ipPhone;

Koden förutsätter att ipPhone och telno matchar varandra. Telefonnummer som inte finns i båda tabellerna kommer inte att infogas i misc.

Edit: Du vill kanske lägga till villkoret "IS NOT NULL" på data-kolumnerna för att inte få rader i misc med NULL-attribut.

INSERT INTO misc (recno, miscno, text)
SELECT main.record_id AS recno, 8 AS misc.miscno, tempADUser.ipPhone
FROM tempADUser 
INNER JOIN main ON main.telno = tempADUser.ipPhone
WHERE tempADUser.ipPhone IS NOT NULL;

INSERT INTO misc (recno, miscno, text)
SELECT main.record_id AS recno, 15 AS misc.miscno, tempADUser.extensionAttribute1
FROM tempADUser 
INNER JOIN main ON main.telno = tempADUser.ipPhone;
WHERE tempADUser.extensionAttribute1 IS NOT NULL;
Medlem sedan dec. 1999503 inlägg
#3

Hej, antar att text ska vara mtext.

Får dock följande fel när jag exekverar:

Msg 102, Level 15, State 1, Line 2
Incorrect syntax near '.'.

Syftar _troligen_ på misc.miscno...

Medlem sedan aug. 20039 340 inlägg
#4

mtext, jo visst. Ta bort "AS" och prova igen.

Edit: Och "misc." i "misc.miscno".

Medlem sedan dec. 1999503 inlägg
#5
INSERT INTO misc (recno, miscno, mtext)
SELECT main.record_id AS recno, 8 AS miscno, tempADUser.company
FROM tempADUser 
INNER JOIN main ON main.telno = tempADUser.ipPhone
WHERE tempADUser.ipPhone IS NOT NULL;

Funkar toppen (y)

Nu över till vidare utveckling, om jag först vill se om posten finns i misc och i sådana fall uppdatera den annars skapa en ny... Hur göra? Min tanke är att skapa en SP för detta, har börjat lite smått men inte kommit på något bra sätt att kolla om posten finns eller ej..

USE [nice]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[usp_INSERTUPDATEEMP]
( 
  @Recno AS int, 
  @Miscno AS int, 
  @MText AS varchar(255)
)
AS
BEGIN
 IF EXISTS (................) 
    BEGIN
        UPDATE  misc
        SET  mtext = @MText
        WHERE recno = @Recno AND miscno = @Miscno
    END
    ELSE
    BEGIN
        INSERT INTO misc (recno, miscno, mtext)
		SELECT main.record_id AS recno, 8 AS miscno, tempADUser.company
		FROM tempADUser 
		INNER JOIN main ON main.telno = tempADUser.ipPhone
		WHERE tempADUser.ipPhone IS NOT NULL;
    END
END
256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)