Problema alter table su campi PK

venerdì 20 febbraio 2009 - 12.32

dipy Profilo | Junior Member

Ciao a tutti.
Ho bisogno di eseguire questa alter in maniera distribuita su più database presenti su dei sw client.

ALTER TABLE SPEDIZIONI drop PK_SPEDIZIONI
alter table SPEDIZIONI alter column FORNITURA varchar(50) not null
alter table SPEDIZIONI add primary key PK_SPEDIZIONI(FORNITURA,AZIENDA,PROG)

Il problema è che in diversi DB dei client, il nome del vincolo anzichè essere PK_SPEDIZIONE è per esempio PK_SPEDIZIONE_4565457898 (o qualche altro numeraccio).
Esiste un modo per forzare il nome del vincolo prima di eseguire la alter?

alx_81 Profilo | Guru

>Ciao a tutti.
Ciao!

>ALTER TABLE SPEDIZIONI drop PK_SPEDIZIONI
>alter table SPEDIZIONI alter column FORNITURA varchar(50) not
>null
>alter table SPEDIZIONI add primary key PK_SPEDIZIONI(FORNITURA,AZIENDA,PROG)
>Il problema è che in diversi DB dei client, il nome del vincolo
>anzichè essere PK_SPEDIZIONE è per esempio PK_SPEDIZIONE_4565457898
>(o qualche altro numeraccio).
Innanzitutto, che RDBMS utilizzi?

>Esiste un modo per forzare il nome del vincolo prima di eseguire la alter?
Se SQL Server, devi rinominare la PK come meglio credi prima (ad esempio PK_<nometabella>)
guarda qui:

sp_rename (transact-SQL)
http://msdn.microsoft.com/it-it/library/ms188351.aspx

Ciao!
--

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

dipy Profilo | Junior Member

Si scusa dimenticavo di dire che sono su SQL Server 2005. la sp_rename sicuramente mi è utile, il problema è che non so a priori quale sia il nome effettivo della PK. Come ti dicevo mi da PX_SPEDIZIONI_ seguito da un numeraccio che purtroppo varia da postazione a postazione. Sai mica se c'è un modo per ottenere il nome della PK di una tabella?

alx_81 Profilo | Guru

>Si scusa dimenticavo di dire che sono su SQL Server 2005. la
>sp_rename sicuramente mi è utile, il problema è che non so a
>priori quale sia il nome effettivo della PK. Come ti dicevo mi
>da PX_SPEDIZIONI_ seguito da un numeraccio che purtroppo varia
>da postazione a postazione. Sai mica se c'è un modo per ottenere
>il nome della PK di una tabella?
Certo, è necessario sapere a priori il nome della pk. Per ottenerlo puoi lavorare con lo schema INFORMATION_SCHEMA:
SELECT CONSTRAINT_SCHEMA , CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE = 'PRIMARY KEY' AND TABLE_NAME IS NOT NULL
--

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

dipy Profilo | Junior Member

PERFETTO FUNZIONA TUTTO!
GRAZIE MILLE!! APPENA DIVENTO MILIONARIO TI REGALO UNA PORSCHE! :-D

alx_81 Profilo | Guru

Sbrigati!!!
--

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
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