Errore: Impossibile associare l'identificatore in più parti. "...."

giovedì 03 luglio 2008 - 11.04

paovanm Profilo | Junior Member

Ciao a tutti,
sto cercando di inserire dei dati in una tabella in un database sql server 2005 ma l'inserimento fallisce e mi viene dato il seguente errore: Origine errore: .Net SqlClient Data Provider. Impossibile associare l'identificatore in più parti. "No.DTP"

La tabella che voglio aggiornare è strutturata come segue:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[03_00_Block](
[ID_Basamento] [int] IDENTITY(1,1) NOT NULL,
[ID motore] [int] NOT NULL,
[Gruppo funzionale] [smallint] NULL CONSTRAINT [DF_03_00_Block_Gruppo funzionale] DEFAULT ((5)),
[Componente/Gruppo] [varchar](15) NULL CONSTRAINT [DF_03_00_Block_Componente/Gruppo] DEFAULT ('Basamento'),
[No] [char](5) NULL,
[codice] [varchar](10) NOT NULL CONSTRAINT [DF_03_00_Block_Basamento_codice] DEFAULT ('Insert cod'),
[ore] [int] NOT NULL CONSTRAINT [DF_03_00_Block_Basamento_ore] DEFAULT ((0)),
[ore inizio difettosità] [int] NULL,
[ore sost componente] [int] NULL,
[in Prova] [bit] NOT NULL CONSTRAINT [DF_03_Block Group_Basamento_in Prova] DEFAULT ((1)),
[No. DTP] [int] NULL,
[modifiche] [varchar](255) NULL,
[note] [varchar](255) NULL,
[Basamento_Class bronzine] [char](4) NULL,
[Basamento_Class pistoni] [char](6) NULL,
[Accoppiamento perni-banco-basamento] [varchar](250) NULL,
CONSTRAINT [PK_03 Block Group] PRIMARY KEY CLUSTERED
(
[ID_Basamento] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'03_00_Block', @level2type=N'COLUMN',@level2name=N'ID_Basamento'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Basamento' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'03_00_Block', @level2type=N'COLUMN',@level2name=N'Gruppo funzionale'
GO
ALTER TABLE [dbo].[03_00_Block] WITH NOCHECK ADD CONSTRAINT [FK_03_00_Block_01_Project/Engine Information] FOREIGN KEY([ID motore])
REFERENCES [dbo].[01_Project/Engine Information] ([ID Motore])
GO
ALTER TABLE [dbo].[03_00_Block] CHECK CONSTRAINT [FK_03_00_Block_01_Project/Engine Information]
GO
ALTER TABLE [dbo].[03_00_Block] WITH CHECK ADD CONSTRAINT [FK_03_00_Block_AAA_Sommario_DTP] FOREIGN KEY([No. DTP])
REFERENCES [dbo].[AAA_Sommario_DTP] ([No. DTP])
GO
ALTER TABLE [dbo].[03_00_Block] CHECK CONSTRAINT [FK_03_00_Block_AAA_Sommario_DTP]
GO
ALTER TABLE [dbo].[03_00_Block] WITH NOCHECK ADD CONSTRAINT [FK_03_00_Block_GRUPPI FUNZIONALI] FOREIGN KEY([Gruppo funzionale])
REFERENCES [dbo].[CCC_GRUPPI FUNZIONALI] ([No#])
ON UPDATE CASCADE
GO
ALTER TABLE [dbo].[03_00_Block] CHECK CONSTRAINT [FK_03_00_Block_GRUPPI FUNZIONALI]

Il campo che mi viene segnalato nell'errore "No.DTP" (senza spazio) non risulta nella tabella di cui sopra, e neppure nella tabella ad essa associata (FK No. DTP) che è strutturata così:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[AAA_Sommario_DTP](
[No. DTP] [int] NOT NULL,
[Descriz_Componente] [varchar](50) NULL,
[ID motore] [int] NULL,
[Causale] [varchar](50) NULL,
[Esito] [char](2) NULL,
CONSTRAINT [PK_AAA_Sommario_DTP_1] PRIMARY KEY CLUSTERED
(
[No. DTP] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'OK o NG' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AAA_Sommario_DTP', @level2type=N'COLUMN',@level2name=N'Esito'

Ho provato a cancellare e ricreare il link tra le due ma l'errore non scompare... qualcuno può darmi altri suggerimenti???

Grazie in anticipo
Michela

lbenaglia Profilo | Guru

>sto cercando di inserire dei dati in una tabella in un database
>sql server 2005 ma l'inserimento fallisce e mi viene dato il
>seguente errore: Origine errore: .Net SqlClient Data Provider.
>Impossibile associare l'identificatore in più parti. "No.DTP"

Ciao Michela,

E' sempre sconsigliato utilizzare degli identificatori che non aderiscono alle regole degli identificatori regolari:
http://msdn.microsoft.com/en-us/library/ms175874.aspx

Ad ogni modo racchiudendo tra parentesi quadre [] gli identificatori irregolari, dovresti riuscire a referenziarli senza problemi.
Come fai a popolare le tabelle?

>Grazie in anticipo
Prego.

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

paovanm Profilo | Junior Member

Il problema è che l'identificatore citato dall'errore non è presente in tabella... e non lo ritrovo neppure nelle tabelle ad essa correlate. (l'ho corretto dove era presente ovvero in una tabella ed in una vista...)
L'errore mi viene ripetuto in tutte le tabelle che apro e tento di modificare... c'è per caso un'istruzione per ritrovare l'identificatore segnalato all'interno di tutto il database, o per capire meglio la natura dell'errore?
Grazie,
Michela

alx_81 Profilo | Guru

>Ho provato a cancellare e ricreare il link tra le due ma l'errore
>non scompare... qualcuno può darmi altri suggerimenti???
intanto, dovresti seguire le regole degli identificatori in SQL Server:

Identifiers
http://msdn.microsoft.com/en-us/library/ms175874.aspx


Puoi passarci la INSERT che usi per popolare le tabelle?


>Grazie in anticipo
di nulla!

------- EDIT -----------------
Scusate.. avevo la risposta aperta e non avevo visto il resto della discussione
--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

veramente inserisco i dati dalla tabella visualizzata mediante SQL server management studio

paovanm Profilo | Junior Member

E' chiara la mia risposta?
Eseguo l'input direttamente dalla tabella che viene visualizzata dal SQL Server Management Studio.
C'è qualche suggerimento che potete darmi? ora sono proprio bloccatta e non so da che parti iniziare a mettere mano...

alx_81 Profilo | Guru

>E' chiara la mia risposta?
>Eseguo l'input direttamente dalla tabella che viene visualizzata
>dal SQL Server Management Studio.
>C'è qualche suggerimento che potete darmi? ora sono proprio bloccatta
>e non so da che parti iniziare a mettere mano...
Prova a profilare l'inserimento che stai facendo a manina. Apri dal menu tools il SQL Server Profiler e poi vedi che insert viene eseguita.

--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

Ciao,
Sono riuscita ad inserire alcuni dati, e modificarne altri "a manina" (scrivendo uno script, non dalla tabella nel Management Studio), cosa che prima non riuscivo. Come faccio però a vedere che insert viene eseguita dal SQL Server provider?
Grazie, Ciao
Michela

alx_81 Profilo | Guru

>Come faccio però a vedere che insert viene eseguita dal SQL Server provider?
Profiler?

Menu Tools --> SQL Profiler

Quando si apre , File --> New trace.
Ti connetti e fai partire la traccia. Ora vedrai l'elenco delle istruzioni che lanci. Se vuoi puoi impostare eventi da vedere e colonne da filtrare.

--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

sì scusa, SQL Profiler

alx_81 Profilo | Guru

>sì scusa, SQL Profiler
ci sei riuscita?
--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

Sono riuscita negli inserimenti dall'editor SQL (non direttamente dalla tabella del management studio) ma non ho capito come visualizzare questi inserimenti con SQL server profiler (non l'ho mai usato).
per il resto gliel'ho data su con gli iserimenti dalla tabella del management studio, non capisco da dove arrivi l'errore per il quale ho aperto il post, continuo ad averlo...

alx_81 Profilo | Guru

>Sono riuscita negli inserimenti dall'editor SQL (non direttamente
>dalla tabella del management studio) ma non ho capito come visualizzare
>questi inserimenti con SQL server profiler (non l'ho mai usato).
>per il resto gliel'ho data su con gli iserimenti dalla tabella
>del management studio, non capisco da dove arrivi l'errore per
>il quale ho aperto il post, continuo ad averlo...
Ripeto.. devi aprire il SQL Server Management Studio, aprire la tabella sulla quale vai a fare l'inserimento. Poi nel menu (Tools, Strumenti in ita) dovresti avere SQL Server Profiler.
Lo apri, selezioni File --> New Trace, ti connetti, e premi, RUN TRACE.
Poi fai l'inserimento che ti dà errore dal Management Studio. Successivamente torni sul profiler e stoppi la traccia (in alto). Poi guardi nella lista delle istruzioni lanciate e guardi nel riquadro sotto quella che ha lanciato l'eccezione.
--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

ho fatto ma non riesco a capire qual'è l'istruzione che ha dato errori. Nella colonna dell'EventClass mi ritrovo coppie di "SQL: BatchStarting", "SQL: BatchCompleted".
Alla fine mi ritrovo: RPC: Completed e sotto la seguente istruzione:
exec sp_executesql N'UPDATE [03_00_Block] SET No = @No WHERE (ID_Basamento = @Param1) AND ([ID motore] = @Param2) AND ([Gruppo funzionale] = @Param3) AND ([Componente/Gruppo] = @Param4) AND (No = @Param5) AND (codice = @Param6) AND (ore = @Param7) AND ([ore inizio difettosità] IS NULL) AND ([ore sost componente] IS NULL) AND ([in Prova] = @Param8) AND (No.DTP IS NULL) AND (modifiche IS NULL) AND (note = @Param9) AND ([Basamento_Class bronzine] IS NULL) AND ([Basamento_Class pistoni] IS NULL) AND ([Accoppiamento perni-banco-basamento] IS NULL)',N'@No nvarchar(4000),@Param1 int,@Param2 int,@Param3 smallint,@Param4 nvarchar(9),@Param5 nvarchar(5),@Param6 nvarchar(9),@Param7 int,@Param8 bit,@Param9 nvarchar(17)',@No=N'',@Param1=3,@Param2=3,@Param3=5,@Param4=N'basamento',@Param5=N'PL424',@Param6=N'A0010140E',@Param7=0,@Param8=1,@Param9=N'prova inserimento'

Per esempio in questo caso non mi faceva cancellare il valore dentro la cella No che in questa espressione è associato al @Param5...
Dove dovrei capire che c'è un errore?

Grazie.
Ciao

alx_81 Profilo | Guru

>Per esempio in questo caso non mi faceva cancellare il valore
>dentro la cella No che in questa espressione è associato al @Param5...
>Dove dovrei capire che c'è un errore?
Devi prendere il comando e lanciarlo su Management Studio, in una nuova query. Lì vedi se è il comando che ha generato l'errore e vedi l'errore che ti torna. Postalo che gli diamo un'occhiata.
--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

OK
il comando è quello che avevo inserito prima, che comunque è:
exec sp_executesql N'UPDATE [03_00_Block] SET No = @No WHERE (ID_Basamento = @Param1) AND ([ID motore] = @Param2) AND ([Gruppo funzionale] = @Param3) AND ([Componente/Gruppo] = @Param4) AND (No = @Param5) AND (codice = @Param6) AND (ore = @Param7) AND ([ore inizio difettosità] IS NULL) AND ([ore sost componente] IS NULL) AND ([in Prova] = @Param8) AND (No.DTP IS NULL) AND (modifiche IS NULL) AND (note = @Param9) AND ([Basamento_Class bronzine] IS NULL) AND ([Basamento_Class pistoni] IS NULL) AND ([Accoppiamento perni-banco-basamento] IS NULL)',N'@No nvarchar(4000),@Param1 int,@Param2 int,@Param3 smallint,@Param4 nvarchar(9),@Param5 nvarchar(5),@Param6 nvarchar(9),@Param7 int,@Param8 bit,@Param9 nvarchar(17)',@No=N'',@Param1=3,@Param2=3,@Param3=5,@Param4=N'basamento',@Param5=N'PL424',@Param6=N'A0010140E',@Param7=0,@Param8=1,@Param9=N'prova inserimento'

e l'errore è sempre lo stesso:
Messaggio 4104, livello 16, stato 1, riga 1
Impossibile associare l'identificatore in più parti "No.DTP".

Come vedi l'identificatore "No.DTP" non è un campo della tabella

lbenaglia Profilo | Guru

>il comando è quello che avevo inserito prima
Chi o che cosa genera questo comando?

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

paovanm Profilo | Junior Member

penso venga generato automaticamante nel momento in cui modifico la tabella dal management studio

lbenaglia Profilo | Guru

>penso venga generato automaticamante nel momento in cui modifico
>la tabella dal management studio

Ho creato la seguente tabella e ho provato a popolarla da SSMS (tasto DX, Open Table):

USE tempdb; CREATE TABLE dbo.foo( [No. DTP] int NOT NULL );

La tabella viene popolata correttamente.

Queste sono le mie versioni di prodotti:

Microsoft SQL Server Management Studio 9.00.3042.00
Microsoft Analysis Services Client Tools 2005.090.3042.00
Microsoft Data Access Components (MDAC) 2000.085.1132.00 (xpsp.080413-0852)
Microsoft MSXML 2.6 3.0 5.0 6.0
Microsoft Internet Explorer 7.0.5730.11
Microsoft .NET Framework 2.0.50727.1433
Operating System 5.1.2600

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

alx_81 Profilo | Guru

>OK
>il comando è quello che avevo inserito prima, che comunque è:
>exec sp_executesql N'UPDATE [03_00_Block] SET No = @No WHERE
>(ID_Basamento = @Param1) AND ([ID motore] = @Param2) AND ([Gruppo
>funzionale] = @Param3) AND ([Componente/Gruppo] = @Param4) AND
>(No = @Param5) AND (codice = @Param6) AND (ore = @Param7) AND
>([ore inizio difettosità] IS NULL) AND ([ore sost componente]
>IS NULL) AND ([in Prova] = @Param8) AND (No.DTP IS NULL) AND
>(modifiche IS NULL) AND (note = @Param9) AND ([Basamento_Class
>bronzine] IS NULL) AND ([Basamento_Class pistoni] IS NULL) AND
>([Accoppiamento perni-banco-basamento] IS NULL)',N'@No nvarchar(4000),@Param1
>int,@Param2 int,@Param3 smallint,@Param4 nvarchar(9),@Param5
>nvarchar(5),@Param6 nvarchar(9),@Param7 int,@Param8 bit,@Param9
>nvarchar(17)',@No=N'',@Param1=3,@Param2=3,@Param3=5,@Param4=N'basamento',@Param5=N'PL424',@Param6=N'A0010140E',@Param7=0,@Param8=1,@Param9=N'prova
>inserimento'
Prova a cambiare il No.DTP in [No. DTP] ovvero mettendo il tuo campo..
in quel modo funziona?
--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

Sai che mi sono accorta ora che nello script che ti ho mandato (copiato ed incollato dal sql server profiler) risulta il campo [No.DTP] (senza spazio) (campo che viene appunto richiamato dal messaggio di errore che blocca l'inserimento dati) ma nella mia tabella da management studio il campo è [No. DTP] (con spazio)... potrebbero essere diversi? ovvero che una modifica (come l'aggiunta dello spazio) non sia stata salvata completamente?
Se dal management query editor cerco di selezionare la colonna incriminata "select [No.DTP] from [03_00_Block]" (SENZA SPAZIO) non la riconosce, con lo spazio "select [No. DTP] from [03_00_Block]" sì... quindi forse questo esclude già quello che ho detto prima, vero?

alx_81 Profilo | Guru

>Se dal management query editor cerco di selezionare la colonna
>incriminata "select [No.DTP] from [03_00_Block]" (SENZA SPAZIO)
>non la riconosce, con lo spazio "select [No. DTP] from [03_00_Block]"
>sì... quindi forse questo esclude già quello che ho detto prima,
>vero?
Ti dico solo che qui c'è un po' di confusione. Ti consiglio vivamente di usare le regole che ti ha indicato Lorenzo nel primo post sugli identificatori.
Risolvi il problema a monte
--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

OK
grazie
Michela

alx_81 Profilo | Guru

>OK
>grazie
avresti dovuto accettare quello di Lorenzo

--

Alessandro Alpi | SQL Server MVP

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

paovanm Profilo | Junior Member

l'ho fatto ora, scusate!
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