Questo non funziona in SQL Server 2008:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
L'errore è:
Sintassi errata vicino alla parola chiave "SET".
Che cosa sto facendo di sbagliato?
Questo non funziona in SQL Server 2008:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
L'errore è:
Sintassi errata vicino alla parola chiave "SET".
Che cosa sto facendo di sbagliato?
Risposte:
Questo funzionerà in SQL Server:
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
non puoi usare alter column per questo, usa invece add
ALTER TABLE Employee
ADD DEFAULT('SANDNES') FOR CityBorn
Il modo corretto per farlo è il seguente:
Esegui il comando:
sp_help [table name]
Copia il nome del file CONSTRAINT
.
Rilascia il DEFAULT CONSTRAINT
:
ALTER TABLE [table name] DROP [NAME OF CONSTRAINT]
Esegui il comando seguente:
ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
La soluzione di Hoodaticus era perfetta, grazie, ma avevo anche bisogno che fosse ri-eseguibile e ho trovato questo modo per verificare se fosse stata fatta ...
IF EXISTS(SELECT * FROM information_schema.columns
WHERE table_name='myTable' AND column_name='myColumn'
AND Table_schema='myDBO' AND column_default IS NULL)
BEGIN
ALTER TABLE [myDBO].[myTable] ADD DEFAULT 0 FOR [myColumn] --Hoodaticus
END
Esistono due scenari in cui è possibile modificare il valore predefinito per una colonna,
domanda
create table table_name
(
column_name datatype default 'any default value'
);
In questo caso il mio server SQL non consente di modificare il valore di vincolo predefinito esistente. Pertanto, per modificare il valore predefinito è necessario eliminare il vincolo predefinito generato dal sistema o generato dall'utente. E dopo quel valore predefinito può essere impostato per una particolare colonna.
Segui alcuni passaggi:
Eseguire questa procedura del database di sistema, accetta il nome della tabella come parametro. Restituisce un elenco di tutti i vincoli per tutte le colonne all'interno della tabella.
execute [dbo].[sp_helpconstraint] 'table_name'
Sintassi:
alter table 'table_name' drop constraint 'constraint_name'
Sintassi:
alter table 'table_name' add default 'default_value' for 'column_name'
Saluti @!!!
nel caso in cui esista già una limitazione con il suo nome predefinito:
-- Drop existing default constraint on Employee.CityBorn
DECLARE @default_name varchar(256);
SELECT @default_name = [name] FROM sys.default_constraints WHERE parent_object_id=OBJECT_ID('Employee') AND COL_NAME(parent_object_id, parent_column_id)='CityBorn';
EXEC('ALTER TABLE Employee DROP CONSTRAINT ' + @default_name);
-- Add default constraint on Employee.CityBorn
ALTER TABLE Employee ADD CONSTRAINT df_employee_1 DEFAULT 'SANDNES' FOR CityBorn;
È possibile utilizzare la sintassi seguente, per ulteriori informazioni, consultare questa domanda e risposte: Aggiungere una colonna con un valore predefinito a una tabella esistente in SQL Server
Sintassi:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
Esempio :
ALTER TABLE SomeTable
ADD SomeCol Bit NULL --Or NOT NULL.
CONSTRAINT D_SomeTable_SomeCol --When Omitted a Default-Constraint Name is
autogenerated.
DEFAULT (0)--Optional Default-Constraint.
WITH VALUES --Add if Column is Nullable and you want the Default Value for Existing Records.
Un altro modo :
Fare clic con il tasto destro sulla tabella e fare clic su Design, quindi fare clic sulla colonna per cui si desidera impostare il valore predefinito.
Quindi in fondo alla pagina aggiungi un valore o un'associazione di default: qualcosa come '1' per stringa o 1 per int.
Ho appena trovato 3 semplici passaggi per modificare la colonna già esistente che prima era nulla
update orders
set BasicHours=0 where BasicHours is null
alter table orders
add default(0) for BasicHours
alter table orders
alter column CleanBasicHours decimal(7,2) not null
Vincoli del primo rilascio
https://stackoverflow.com/a/49393045/2547164
DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name FROM SYS.DEFAULT_CONSTRAINTS
WHERE PARENT_OBJECT_ID = OBJECT_ID('__TableName__')
AND PARENT_COLUMN_ID = (SELECT column_id FROM sys.columns
WHERE NAME = N'__ColumnName__'
AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)
In secondo luogo creare il valore predefinito
ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
Prova a seguire il comando;
ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
Come la risposta di Yuck con un segno di spunta per consentire l'esecuzione dello script più di una volta senza errori. (meno stringhe di codice / personalizzate rispetto all'utilizzo di information_schema.columns)
IF object_id('DF_SomeName', 'D') IS NULL BEGIN
Print 'Creating Constraint DF_SomeName'
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
END