VALORE DI DEFAULT NELLE TABELLE SQL

lunedì 10 settembre 2007 - 13.38

MarcodotnetHell Profilo | Junior Member

Io ho una tabella dal nome "accessi" con i campi nome, congome, limite,e-mail. Vorrei che quando inserisco un nuovo rigo, il valore del campo limite assuma di default il valore 5.

Come posso impsotare nella tabella sql nel campo "limite" il valore di default 5.

Io ho usato la seguente sintassi che non funzionano

ALTER TABLE Accessi ALTER COLUMN limite SET DEFAULT '5'

ALTER TABLE Accessi MODIFY limite DEFAULT '5'

Grazie mille per il vostro interessamento.


alx_81 Profilo | Guru

Ciao!
>Io ho una tabella dal nome "accessi" con i campi nome, congome,
>limite,e-mail. Vorrei che quando inserisco un nuovo rigo, il
>valore del campo limite assuma di default il valore 5.
>Come posso impsotare nella tabella sql nel campo "limite" il
>valore di default 5.
>
>Io ho usato la seguente sintassi che non funzionano
>ALTER TABLE Accessi ALTER COLUMN limite SET DEFAULT '5'
>ALTER TABLE Accessi MODIFY limite DEFAULT '5'
No, devi usare la seguente sintassi:

ALTER TABLE Accessi ADD CONSTRAINT DF_Accessi_limite DEFAULT '5' FOR limite

>Grazie mille per il vostro interessamento.
di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>Come posso impsotare nella tabella sql nel campo "limite" il
>valore di default 5.

Ciao Marco,

Osserva il seguente esempio:

USE tempdb; CREATE TABLE dbo.Accessi( AccessoID int NOT NULL PRIMARY KEY, Nome varchar(10) NOT NULL, Cognome varchar(10) NOT NULL, Limite int NOT NULL ); ALTER TABLE dbo.Accessi ADD CONSTRAINT DF_Limite DEFAULT 5 FOR Limite; INSERT INTO dbo.Accessi(AccessoID, Nome, Cognome) VALUES(1, 'Lorenzo', 'Benaglia'); INSERT INTO dbo.Accessi(AccessoID, Nome, Cognome) VALUES(2, 'Luca', 'Bianchi'); INSERT INTO dbo.Accessi VALUES(3, 'Andrea', 'Montanari', 24); SELECT * FROM dbo.Accessi; /* Output: AccessoID Nome Cognome Limite ----------- ---------- ---------- ----------- 1 Lorenzo Benaglia 5 2 Luca Bianchi 5 3 Andrea Montanari 24 (3 row(s) affected) */ DROP TABLE dbo.Accessi;

>Grazie mille per il vostro interessamento.
Prego.

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

MarcodotnetHell Profilo | Junior Member

mi da questo errore

Messaggio 1781, livello 16, stato 1, riga 1
Alla colonna è già associato un valore predefinito.
Messaggio 1750, livello 16, stato 0, riga 1
Impossibile creare il vincolo. Vedere gli errori precedenti.

ma io non ho mai impostato nulla di default. Inoltre la tabella accessi proviene da un UPSIZE da ACCESS che ha come valore di default 0.
Approposito come mai con l'upsize non si è portato dietro anche il valore di default in sql.

lbenaglia Profilo | Guru

>mi da questo errore
>
>Messaggio 1781, livello 16, stato 1, riga 1
>Alla colonna è già associato un valore predefinito.
LOL, significa che hai già definito un constraint di default sulla colonna

>ma io non ho mai impostato nulla di default. Inoltre la tabella
>accessi proviene da un UPSIZE da ACCESS che ha come valore di
>default 0.
Il valore 0 è relativo ad un constraint di default?
Esegui una sp_help per vedere tutti i constraint definiti sulla tabella (li trovi in fondo):

EXEC sp_help [dbo.Accessi];

Eventualmente rimuovi il vecchio constraint e definiscine uno nuovo:

ALTER TABLE dbo.Accessi DROP CONSTRAINT DF_Limite; ALTER TABLE dbo.Accessi ADD CONSTRAINT DF_Limite DEFAULT 5 FOR Limite;

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

MarcodotnetHell Profilo | Junior Member

Ok
Intanto vi ringrazio.
Ho fatto tutto quello che mi avete indicato e adesso sembra prendere tutti i comandi che prima non mi prendeva. Però quando inserisco un nuovo rigo nella tabella il alore limite mi da come predefinito null e non 5.

GRazie mille per il vostro aiuto.

lbenaglia Profilo | Guru

>Ho fatto tutto quello che mi avete indicato e adesso sembra prendere
>tutti i comandi che prima non mi prendeva. Però quando inserisco
>un nuovo rigo nella tabella il alore limite mi da come predefinito
>null e non 5.
Ascolta, puoi postare il comando DDL di CREATE TABLE della tabella completo di constraints che puoi generare con SSMS?
Altrimenti non ne usciamo più

>GRazie mille per il vostro aiuto.
Prego.

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

MarcodotnetHell Profilo | Junior Member

Mi dispiace farvi danare ma non mi funziona questo è lo script :

USE [Dati]
GO
/****** Oggetto: Table [dbo].[Accessi] Data script: 09/10/2007 15:27:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Accessi](
[username] [nvarchar](50) NULL,
[password] [nvarchar](50) NULL,
[limite] [nvarchar](50) NULL CONSTRAINT [DF__limite] DEFAULT ('5'),
[email] [nvarchar](50) NULL
) ON [PRIMARY]

alx_81 Profilo | Guru

>Mi dispiace farvi danare ma non mi funziona questo è lo script
>:
>
>USE [Dati]
>GO
>/****** Oggetto: Table [dbo].[Accessi] Data script: 09/10/2007
>15:27:08 ******/
>SET ANSI_NULLS ON
>GO
>SET QUOTED_IDENTIFIER ON
>GO
>CREATE TABLE [dbo].[Accessi](
> [username] [nvarchar](50) NULL,
> [password] [nvarchar](50) NULL,
> [limite] [nvarchar](50) NULL CONSTRAINT [DF__limite] DEFAULT
>('5'),
> [email] [nvarchar](50) NULL
>) ON [PRIMARY]
>
come fai ad inserire? cosa utilizzi? una insert? come la scrivi?

Alx81 =)

http://blogs.dotnethell.it/suxstellino

MarcodotnetHell Profilo | Junior Member

uso SSMS quindi inserisco in maniera visuale dal tool di microsoft

lbenaglia Profilo | Guru

>USE [Dati]
>GO
>/****** Oggetto: Table [dbo].[Accessi] Data script: 09/10/2007
>15:27:08 ******/
>SET ANSI_NULLS ON
>GO
>SET QUOTED_IDENTIFIER ON
>GO
>CREATE TABLE [dbo].[Accessi](
> [username] [nvarchar](50) NULL,
> [password] [nvarchar](50) NULL,
> [limite] [nvarchar](50) NULL CONSTRAINT [DF__limite] DEFAULT
>('5'),
> [email] [nvarchar](50) NULL
>) ON [PRIMARY]
>

Come vedi tutte le colonne possono essere valorizzate con NULL.
La cosa ha poco senso, non trovi?
Imposta a NOT NULL tutte le colonne obbligatorie.

Inoltre per quale motivo utilizzi un data type UNICODE? Hai la necessità di gestire informazioni in alfabeti differenti dal nostro (ad esempio cinese, giapponese)?

Infine limite non dovrebbe avere un data type numerico?

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

MarcodotnetHell Profilo | Junior Member

Grazie mille per l'aiuto

Adesso mi funziona. Visto che stò facendo una migrazione di un'applicazione che usava db access io ho fatto l'upsize delle tabelle con il tool di access quindi è stato lui a crearmi quello script che ti ho mandato.
Con quanto detto significa che non posso fidarmi di tale tool? oppure sbaglio
io qualcosa?
Premetto che latabella accessi è così come la vedi tu anche in access.

Intanto grazie mille per il tuo interessamento.

lbenaglia Profilo | Guru

>Con quanto detto significa che non posso fidarmi di tale tool?
Non l'ho mai utilizzato, quindi non mi sbilancio

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5