Stored Procedure in sql server 2005 con la Query Insert

mercoledì 24 maggio 2006 - 12.18

trinity Profilo | Guru

In un db sql server 2005 ho due diverse tabelle collegate tra loro cod due chiavi uguali, vorrei create un stored di inserimento dati ma non vorrei utilizzare la seguente sintassi:

Insert Into dbo.Tab_Clienti(tipologia,ragsociale,indirizzo,cap,citta,......,) Values (@Tipologia,@Ragsociale,@Indirizzo,@Cap,@citta....)

Insert Into dbo.Tab_ClienteComm (idcliente,codpagamento,descpagamento,....) Values (@IdCliente,@CodPag,@DescPag......)
GO

ossi una doppia insert ma c'è la possibilità di utilizzare anche nell'insert il Join per esempio o qualche altro metodo?
Se si come?

Ciao

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

lbenaglia Profilo | Guru

>ossi una doppia insert ma c'è la possibilità di utilizzare anche
>nell'insert il Join per esempio o qualche altro metodo?
>Se si come?

Ehm... Fabio, posta la struttura delle due tabelle (CREATE TABLE) e spiega dettagliatamente cosa vorresti fare.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

io ho due tabelle la prima si chiama cliente:

codice:

CREATE TABLE [dbo].[Tab_Cliente]( [id] [int] IDENTITY(1,1) NOT NULL, [tipologia] [varchar](100) COLLATE Latin1_General_CI_AS NULL, [ragsociale] [varchar](100) COLLATE Latin1_General_CI_AS NULL, [indirizzo] [varchar](100) COLLATE Latin1_General_CI_AS NULL, [cap] [varchar](5) COLLATE Latin1_General_CI_AS NULL, [citta] [varchar](100) COLLATE Latin1_General_CI_AS NULL, [prov] [varchar](2) COLLATE Latin1_General_CI_AS NULL, [telefono] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [fax] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [email] [varchar](100) COLLATE Latin1_General_CI_AS NULL, [internet] [varchar](100) COLLATE Latin1_General_CI_AS NULL, [codfiscale] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [piva] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [datacreate] [smalldatetime] NULL, [dataupdate] [smalldatetime] NULL, CONSTRAINT [PK_Tab_Cliente] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO

la seconda tabella si chiama ClienteComm

CREATE TABLE [dbo].[Tab_ClienteComm]( [idcliente] [int] NOT NULL, [codpagamento] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [Descpagamento] [varchar](100) COLLATE Latin1_General_CI_AS NULL, [banca_app] [varchar](100) COLLATE Latin1_General_CI_AS NULL, [codconto] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [cin] [varchar](5) COLLATE Latin1_General_CI_AS NULL, [codabi] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [codcab] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [idagente] [int] NULL, [codlistino] [varchar](50) COLLATE Latin1_General_CI_AS NULL, [indirizzo_merce] [varchar](150) COLLATE Latin1_General_CI_AS NULL, [dare] [decimal](18, 5) NULL, [avere] [decimal](18, 5) NULL, [saldo] [decimal](18, 5) NULL, CONSTRAINT [PK_Tab_ClienteComm] PRIMARY KEY CLUSTERED ( [idcliente] ASC )WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO

come potrai vedere la seconda tabella ha un campo chiamato: idcliente(che è chiave) il quale sarà valorizzato con lo stesso id (chiave) della prima tabella, perchè sostanzialmente dovrebbe essere un'unica tabella ma l'ho voluta scindere in due per distinguere l'anagrafica del cliente con i suoi dati commerciali.

La mi adomanda è la seguente, quando vado ad eseguire una stored procedure che mi effettua un Insert di dati o un'Update di dati, c'è la possibilità di eseguire una sola query di insert o di Update per entrambe le tabelle, senza fare 2 Insert e 2 Update?

Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

lbenaglia Profilo | Guru

>La mi adomanda è la seguente, quando vado ad eseguire una stored
>procedure che mi effettua un Insert di dati o un'Update di dati,
>c'è la possibilità di eseguire una sola query di insert o di
>Update per entrambe le tabelle, senza fare 2 Insert e 2 Update?

Come fai ad inserire|aggiornare 2 tabelle contemporaneamente utilizzando un solo comando SQL?
Se lo sai dimmelo

Implementa l'accesso ai dati utilizzando le stored procedure e racchiudi i 2 inserimenti|aggiornamenti in una transazione esplicita, in questo modo le due operazioni fisiche verranno trattate come una sola operazione logica garantendo la consistenza tra i dati delle due tabelle.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

trinity Profilo | Guru

Immaginavo una cosa del genere, in effetti faccio sempre la stored di inserimento/aggiornamento in una bella transazione in modo da stabilizzare e rendere sicuro il tutto, ma avevo posto questa domanda in quanto sapendo che l'sql ha delle risorse infinite e utilizzando ora il nuovo sql server 2005 pensavo che forse una cosa del genere potesse esistere, ma mi sbagliavo pazienza anzi felice di sapere che la mia prima idea era giusta.

Ciao Lorenzo e grazie mille
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5