---
title: "grundtabell som uppdaterar andra tabeller.."
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/21548-grundtabell-som-uppdaterar-andra-tabeller"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "tlee"
published: "2001-08-07T11:41:00.000Z"
updated: "2001-08-13T07:16:00.000Z"
replies: 11
views: 273
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/21548-grundtabell-som-uppdaterar-andra-tabeller"
---

# grundtabell som uppdaterar andra tabeller..

## #1 — tlee, 2001-08-07T11:41Z

Tjena!

Jag har ett artikelregister i en SQL2000 i en tabell som heter: tbl_Products. Denna tabell är en 'Master' tabell dvs den skall pappa till alla andra tabeller.

Nu vill jag ha några 'Child' tabeller som innehåller några av de fälten som finns i 'Master' tabellen.

Alltså..

Om jag uppdaterar någonting i Master tabellen så skall det även uppdateras i Child tabellen., är ni med ?

Det måste ju finnas någon inbyggd funktion för detta i SQL 2000, typ länkad tabell eller något ?

säg till om ni vill att jag utvecklar min fråga :))

/tobias

Permalänk: https://www.webforum.nu/p/21548

## #2 — LarsG, 2001-08-07T12:03Z

Nu förstår jag inte riktigt. Grundiden med en relationsdatabas är ju att man bara lagrar informationen på ett ställe. 

Det enda som ska finnas duplicerat är de nycklar som sammanbinder posterna och nycklar skall man ju aldrig uppdatera (Det kan man i och för sig hantera med hjälp av on update cascade när man definierar sina foreign keys).

Om man nu vill att en uppdatering leder till en uppde/insert i en annan tabell så kan man skapa en trigger för det ändamålet eller så hanterar man det själv och då enklast i en stored procedure.

Permalänk: https://www.webforum.nu/p/352356

## #3 — tlee, 2001-08-07T12:29Z

okej..

jag vet inte alls hur det funkar med relationer och grejer..så om du har en tutorial eller någtot som man kan läsa så vore det uppskattat.

Hur funkar det om man använder relationer, kan man använda vanliga sql satser?

ett litet exempel ...

tabell_1.Name = 'kalle'
tabell_2.Name \> tabell_1.Name

tabell_1.Name = Master tabell
tabell_2.Name är länkad/pekar till tabell_1.Name

SELECT tabell_1.Name, tabell_2.Name;

Och om jag skriver ut detta så kommer båda visa " kalle "

är du med på vad jag menar ?

/t

Permalänk: https://www.webforum.nu/p/352357

## #4 — tlee, 2001-08-07T14:49Z

Mina två tabeller som skall ha en relation mellan sig ser ut såhär

tbl_Products:
ID (PRIMARY KEY)
col_ArticleNr
col_Name
col_Group
col_Price

tbl_Test:
ID (PRIMARY KEY)
col_ArticleNr
col_Name
col_Group
col_Price
col_Price_1
col_Price_2
col_Price_3
col_Price_4
col_Price_5

Alla kolumner har samma datatyp och längd i båda tabellerna.

Några frågor...

1\. I Vilken tabell skall jag skapa relationen (tbl_Products, tbl_Test)?
2\. Alla kolumner skall ju inte ha någon relation utan bara vara vanliga celler, kan jag lägga till med INSERT där relation saknas?
3\. Viken tabell skall vara Primary key table resp Foreign key table?
4\. Vilka av dessa skall vara ikryssade:
Check existing data on creation
Enforce relationship for replication
Enforce relationship for INSERTs and UPDATEs
  Cascade Update Related Fields
  Cascade Delete Related Fields

/tobias

Permalänk: https://www.webforum.nu/p/352358

## #5 — LarsG, 2001-08-07T17:57Z

Du vill alltså ha artiklar och sedan för varje artikel vill du kunna lagra ett antal 
olika prisuppgifter.

I så fall skulle jag definiera tabellerna så här

```

  create table aritcles(col_articleNo int identity,
                        col_articleName varchar(40),
                        col_group varchar(40),
                        primary key(col_articleNo))

  create table articlePrices(col_articleNo int,
                             col_priceType char(10),
                             col_price decimal(8,2),
                             primary key(col_articleNo,col_priceType),
                             foreign key (col_articleNo) references
                             articles(col_articleNo))
```

Då kan man hantera att en artikel har ett godtyckligt antal priser. I och med
att du har en foreign key koppling mellan tabellerna så går det inte att stoppa in
ett värde i col_articleNo i tabellen articlePrices om inte motsvarande värde finns
i tabellen articles.

Alternativt kan man i den senare tabelldefinitionen lägga till

```
create table articlePrices(col_articleNo int,
                             col_priceType char(10),
                             col_price decimal(8,2),
                             primary key(col_articleNo,col_priceType),
                             foreign key (col_articleNo) references
                             articles(col_articleNo) 
                             on delete cascade )
```

Det innebär att om man tar bort en post från tabellen articles så kommer 
de poster i articlePrices som har samma col_articleNo också att tas bort. 
Om man inte anger on delete cascade så får man ett fel om man försöker
ta bort en post från articles och det finns en post med det värdet i
articlePrices. 
On update cascade fungerar analogt.

Hur det här hänger ihop med de kryssrutor du beskrev vet jag inte. Jag kan bara SQL.

Permalänk: https://www.webforum.nu/p/352359

## #6 — tlee, 2001-08-08T07:37Z

hmm.. okej.. får det att fungera ok nu, när jag går in och updaterar eller tar bort ur min master tabell så ändras/tas det bort även i min andra  tabell.. vilket är schysst :))

Ytterligate frågor, 
Hur många tabeller kan jag ha en relation till, finns det någon gräns?

Det verkar inte funka om jag lägger till något i min master databas så läggs det inte till i min child databas?

Hur kan jag lösa det ?

/t

Permalänk: https://www.webforum.nu/p/352360

## #7 — LarsG, 2001-08-08T08:24Z

Gränser, jag har inga direkta siffror i huvudet men det skall inte vara något praktiskt problem.

Lägga till data i foreign-key tabellen får du hantera själv, det finns ingen automatik för det.

Permalänk: https://www.webforum.nu/p/352361

## #8 — tlee, 2001-08-08T08:40Z

okej..  det är ju konstigt att inte det finns.. det får dom fixa.. aja..

Hur löser jag det smidigast?

Kan jag använda en trigger eller något som när det läggs in något i Master tabellen, läser från en lista namnen på de tabeller där samma information skall läggas in?

Har du någon länk eller något till en tutorial med såna grejer.. Har bara använt SELECT, DELETE och UPDATE innan :)

/t

Permalänk: https://www.webforum.nu/p/352362

## #9 — LarsG, 2001-08-08T14:10Z

Jo en trigger visst. Men jag tycker fortfarande att din datamodell är suspekt om du har behov av att lagra samma data i flera tabeller.

Create trigger:
 <http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28000409> 

Du kan ju även söka på msdn på begrepp som

normailzation (ev normalisation)
foreign keys
referential integrity

Permalänk: https://www.webforum.nu/p/352363

## #10 — tlee, 2001-08-10T07:58Z

Tjena..

nytt problem.. vet inte om det beror på mina relationer mellan tabellerna eller vad det är..

here we go..

```
UPDATE [tbl_Fonem_Groups] SET [col_Visible] = 'checked', [col_Price_1] = 10, [col_Price_2] = 20, [col_Price_3] = 30, [col_Price_4] = 40, [col_Price_5] = 50 WHERE [col_Name] = 'BOX';
```

I SQL Query Analyzer får jag följande fel:
Server: Msg 208, Level 16, State 1, Line 1
Invalid object name 'tbl_Fonem_Groups'.

Grejen är den att tabellen finns.. och dom fälten som jag försöker uppdatera har ingen relation med någon annan tabell utan är helt vanliga..

Är det någon inställning som jag behöver göra ?

/t

Permalänk: https://www.webforum.nu/p/352364

## #11 — LarsG, 2001-08-12T15:31Z

Nej, det är bara att den inte hittar tabellen. Har du satt rätt databas och schema?

Permalänk: https://www.webforum.nu/p/352365

## #12 — tlee, 2001-08-13T07:16Z

```
<%
Connect.Open "Provider=SQLOLEDB; Data Source=90.0.0.101; Initial Catalog=arlec_se; User ID=arlec_se; Password=zzzxxzzz;"

strUser = Request.KAKA("User")("Name")
strGroup = Trim(Request.QueryString("Group"))

strVisible = Request.Form("txtActive")

If ( strVisible = "on" ) Then _
	strVisible = "checked"

strPrice_1 = Request.Form("txtPrice1")
strPrice_2 = Request.Form("txtPrice2")
strPrice_3 = Request.Form("txtPrice3")
strPrice_4 = Request.Form("txtPrice4")
strPrice_5 = Request.Form("txtPrice5")

If ( Trim(strUser) > "" & "" ) Then

	
Set DB_QUERY = Connect.Execute("UPDATE [tbl_"& strUser &"_Groups] SET [col_Visisble] = '"& strVisible &"'" &_
					", [col_Price_1] = "& strPrice_1 &"" &_
					", [col_Price_2] = "& strPrice_2 &"" &_
					", [col_Price_3] = "& strPrice_3 &"" &_
					", [col_Price_4] = "& strPrice_4 &"" &_
					", [col_Price_5] = "& strPrice_5 &" WHERE [col_Name] = '"& strGroup &"';")
```

Det är den koden jag använder, samma connect string fungerar när jag skall läsa från databasen..

/t

Permalänk: https://www.webforum.nu/p/352366

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/21548-grundtabell-som-uppdaterar-andra-tabeller
