Provo a insistere...

mercoledì 26 ottobre 2005 - 09.32

rossana Profilo | Newbie

scusate se insisto ma questa cosa mi sta facendo diventare matta.
ho delle tabelle su un db sql che sono in read only e di cui nn riesco a cambiare le proprietà...... e mentre provavo mi sono anche resa conto che ogni tabella creata da zero va su di defualt in read only.

ora: l'utente del db è il classico dbo con login sa che uso per tutti i db residenti su quella macchina, nn ha particolari stranezze.

ma che cavolo ha quel db???? perchè va su tutto in read only???? e dove si cambiano le propietà delle tabelle???

grazie.

lbenaglia Profilo | Guru

>ho delle tabelle su un db sql che sono in read only e di cui
>nn riesco a cambiare le proprietà...... e mentre provavo mi
>sono anche resa conto che ogni tabella creata da zero va su
>di defualt in read only.

Ciao rossana,

se riesci a creare nuove tabelle significa che il database non è read-only.

>ora: l'utente del db è il classico dbo con login sa che uso per
>tutti i db residenti su quella macchina, nn ha particolari stranezze.

Mmmm... se da query analyzer provi a fare una INSERT su una tabella, che errore ottieni?

>grazie
Prego.

Ciao!

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

rossana Profilo | Newbie

il db non è in read only. solo alcune tabelle sono in read only (aprendole dal query analizer, di fianco al nome della tabella nella riga blu in alto... per internderci.... c'è proprio scritto READ ONLY).

sono in read only alcune tabelle del db originario e TUTTE le tabelle nuove create da zero.

gli utenti hanno tutti i privilegi del caso...sono gli stessi utenti che uso per altri db residenti sulla stessa macchina e sono tutti utenti amministrativi con i privilegi di defult.

lbenaglia Profilo | Guru

>il db non è in read only. solo alcune tabelle sono in read only
>(aprendole dal query analizer, di fianco al nome della tabella
>nella riga blu in alto... per internderci.... c'è proprio scritto
>READ ONLY).

Ciao rossana,

ero sconcertato da quanto affermavi, e finalmente sono riuscito a capire cosa intendi con "aprire una tabella" in Query Analyzer :-)

Allora, procediamo con ordine.
Ho aperto Query Analyzer e ho eseguito questo script:

USE tempdb
GO

CREATE TABLE dbo.Students(
StudentID int NOT NULL,
FirstName varchar(10) NOT NULL,
LastName varchar(10) NOT NULL
)
GO

A questo punto ho selezionato la tabella dbo.Stundents dall'Object Browser e ho selezionato Open. Effettivamente il Query Analyzer mi visualizza nella caption "SQL Query Analyzer - [Open Table - Supermicro.tempdb.dbo.Students(read-only)" anche se in realtà sono loggato con una login appartenente al ruolo sysadmin.

Ma che succede? La tabella NON E' read-only ed infatti se chiudi quella finestra ed esegui una banale insert, l'operazione andrà a buon fine:

INSERT dbo.Students VALUES(1, 'Lorenzo', 'Benaglia')
GO

SELECT *
FROM dbo.Students
GO

/* Output:

StudentID FirstName LastName
----------- ---------- ----------
1 Lorenzo Benaglia

(1 row(s) affected)

*/

Per quale motivo il Query Analyzer eseguendo la Open mi dice che la tabella è in sola lettura? La risposta è semplice: dbo.Students non ha alcun constraint PRIMARY KEY o UNIQUE, pertanto non esiste una colonna o una combinazione di colonne che definiscono univocamente ogni riga della tabella e questo può portare all'inserimento di righe uguali (cosa assolutamente deprecabile in un DBMS).
Come si risolve il problema? Defininendo una PRIMARY KEY:

ALTER TABLE dbo.Students
ADD CONSTRAINT PK_Students PRIMARY KEY(StudentID)
GO

Ora se riprovi a fare la Open, vedrai che sarà possibile editare ed inserire nuove righe :-)
Grazie per domanda, utilizzo SQL Server dal 1996 ma non avevo mai notato questa "feature" :-D

Ciao!

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

rossana Profilo | Newbie

provero' immediatamente.in effetti è vero...sulle tabelle incriminate nn c'è nessuna chiave. stranamente nn avevo notato la cosa.

sono io che ringrazio te.

ciao!!

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