Insert con join uno a molti

mercoledì 23 gennaio 2008 - 17.53

squilibrio Profilo | Expert

Ho 2 tabelle del tipo

CREATE TABLE [dbo].[FasiCollaboratori](
[ID] [int] IDENTITY(1,1) NOT NULL,
[IDProgettoFase] [int] NULL,
[IDCollaboratore] [int] NULL,
CONSTRAINT [PK_DocumentiCollaboratori] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]



CREATE TABLE [dbo].[Fasi](
[IDProgettoFase] [int] IDENTITY(1,1) NOT NULL,
[IDProgetto] [int] NULL,
[DataDa] [datetime] NULL,
[Cal] [bit] NULL,
[CalOK] [bit] NULL,
[DataA] [datetime] NULL,
CONSTRAINT [PK_Fasi] PRIMARY KEY CLUSTERED
(
[IDProgettoFase] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]





Io vorrei creare una procedura che salvi le fasi in un'agenda del tipo


CREATE TABLE [dbo].[Agenda](
[IDAgenda] [int] IDENTITY(1,1) NOT NULL,
[IDCollaboratore] [int] NULL,
[startDate] [datetime] NULL,
[endDate] [datetime] NULL,
[IDProgettoFase] [int] NULL CONSTRAINT [DF_Agenda_IDProgettoFase] DEFAULT ((0)),
CONSTRAINT [PK_Agenda] PRIMARY KEY CLUSTERED
(
[IDAgenda] ASC
)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO
SET ANSI_PADDING OFF



quindi dovrei partire da Fasi

se l'elemento ha

Cal = 1 ovvero da inserire in calendario

e

CalOK = 0 ovvero non ancora inserito in calendario


dovrei inserire quella fase nella tabella Agenda, facendo attenzione al fatto che ad una fase potrebbero associati due collaboratori, quindi in questo caso dovrei trovare X righe (per gli X collaboratori che sono associati ad ogni specifica fase)

Io mi perdo con quest'ultima operazione di duplicazione dell'insert in funzione del numero di collaboratori

Grazie per l'aiuto

alx_81 Profilo | Guru

>Io vorrei creare una procedura che salvi le fasi in un'agenda del tipo
>dovrei inserire quella fase nella tabella Agenda, facendo attenzione
>al fatto che ad una fase potrebbero associati due collaboratori,
>quindi in questo caso dovrei trovare X righe (per gli X collaboratori
>che sono associati ad ogni specifica fase)
>
>Io mi perdo con quest'ultima operazione di duplicazione dell'insert
>in funzione del numero di collaboratori

Ho creato qualche insert e ho fatto una insert direttamente da una select con una join.
Prova a dare un'occhiata all'esempio:

INSERT INTO dbo.FasiCollaboratori (IDProgettoFase,IDCollaboratore) VALUES (1, 1) INSERT INTO dbo.FasiCollaboratori (IDProgettoFase,IDCollaboratore) VALUES (1, 2) INSERT INTO dbo.FasiCollaboratori (IDProgettoFase,IDCollaboratore) VALUES (2, 5) INSERT INTO dbo.FasiCollaboratori (IDProgettoFase,IDCollaboratore) VALUES (2, 7) INSERT INTO dbo.FasiCollaboratori (IDProgettoFase,IDCollaboratore) VALUES (3, 1) GO INSERT INTO dbo.Fasi (IDProgetto, DataDa, Cal, CalOK, DataA) VALUES (1, '20080123', 1, 0, '20080124') INSERT INTO dbo.Fasi (IDProgetto, DataDa, Cal, CalOK, DataA) VALUES (2, '20080125', 1, 0, '20080128') INSERT INTO dbo.Fasi (IDProgetto, DataDa, Cal, CalOK, DataA) VALUES (2, '20080127', 1, 1, '20080129') GO INSERT INTO dbo.Agenda(IDCollaboratore, startDate, endDate, IDProgettoFase) SELECT C.IDCollaboratore , F.DataDa , F.DataA , F.IDProgettoFase FROM dbo.FasiCollaboratori C JOIN dbo.Fasi F ON F.IDProgettoFase = C.IDProgettoFase WHERE F.Cal = 1 AND F.CalOK = 0 SELECT * FROM dbo.Agenda /* IDAgenda IDCollaboratore startDate endDate IDProgettoFase ----------- --------------- ----------------------- ----------------------- -------------- 1 1 2008-01-23 00:00:00.000 2008-01-24 00:00:00.000 1 2 2 2008-01-23 00:00:00.000 2008-01-24 00:00:00.000 1 3 5 2008-01-25 00:00:00.000 2008-01-28 00:00:00.000 2 4 7 2008-01-25 00:00:00.000 2008-01-28 00:00:00.000 2 */

come puoi vedere i record inseriti sono quelli risultanti dalla join, esclusi quelli che non rispettano la condizione di Where.
>
>Grazie per l'aiuto
di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

squilibrio Profilo | Expert

Grazie mille!!!!

Domani provo

alx_81 Profilo | Guru

>Grazie mille!!!!
di nulla!

>Domani provo
facci sapere

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5