it-swarm-eu.dev

Jak ustawić domyślną wartość dla istniejącej kolumny

To nie działa w SQL Server 2008:

ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'

Błąd to:

Niepoprawna składnia w pobliżu słowa kluczowego "SET".

Co ja robię źle?

316
Nakul Chaudhary

To zadziała w SQL Server:

ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
493
Yuck
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
144
hoodaticus

nie można użyć do tego zmiany kolumny, użyj zamiast tego dodaj

ALTER TABLE Employee 
ADD DEFAULT('SANDNES') FOR CityBorn
45

Prawidłowy sposób to zrobić jest następujący: 

  1. Uruchom polecenie: 

    sp_help [table name] 
    
  2. Skopiuj nazwę CONSTRAINT.

  3. Upuść DEFAULT CONSTRAINT:

    ALTER TABLE [table name] DROP [NAME OF CONSTRAINT] 
    
  4. Uruchom poniższe polecenie:

    ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
    
26
user3310402

Rozwiązanie Hoodaticusa było doskonałe, dziękuję, ale potrzebowałem go również do ponownego uruchomienia i znalezienia w ten sposób, aby sprawdzić, czy zostało to zrobione ... 

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

Istnieją dwa scenariusze, w których można zmienić domyślną wartość kolumny,

  1. W momencie tworzenia tabeli
  2. Zmodyfikuj istniejącą kolumnę dla istniejącej tabeli.

  1. W momencie tworzenia tabeli/tworzenia nowej kolumny.

Pytanie 

create table table_name
(
    column_name datatype default 'any default value'
);
  1. Zmodyfikuj istniejącą kolumnę dla istniejącej tabeli

W tym przypadku mój serwer SQL nie zezwala na modyfikację istniejącej domyślnej wartości ograniczenia. Aby zmienić domyślną wartość, musimy usunąć istniejące domyślne ograniczenie wygenerowane przez system lub wygenerowane przez użytkownika. A po tej wartości domyślnej można ustawić dla konkretnej kolumny.

Wykonaj kilka kroków:

  1. Wyświetl wszystkie istniejące domyślne ograniczenia wartości dla kolumn.

Wykonaj tę procedurę bazy danych systemu, pobiera ona nazwę tabeli jako parametr. Zwraca listę wszystkich ograniczeń dla wszystkich kolumn w tabeli.

execute [dbo].[sp_helpconstraint] 'table_name'
  1. Usuń istniejące domyślne ograniczenie dla kolumny.

Składnia:

alter table 'table_name' drop constraint 'constraint_name'
  1. Dodaj nowe ograniczenie wartości domyślnej dla tej kolumny:

Składnia:

alter table 'table_name' add default 'default_value' for 'column_name'

twoje zdrowie @!!!

5
Sunil Sharma

Po prostu znaleziono 3 proste kroki, aby zmienić już istniejącą kolumnę, która była wcześniej zerowa

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 
3
David Fawzy
ALTER TABLE [dbo].[Employee] ADD  DEFAULT ('N') FOR [CityBorn]
3
steave

Spróbuj wykonać następujące polecenie;

ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
2
Hasna Ashraf

Podobnie jak odpowiedź Yucka z czekiem, aby umożliwić uruchomienie skryptu więcej niż jeden raz bez błędu. (mniej kodu/niestandardowych ciągów niż przy użyciu parametru 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
1
ScottFoster1000

Możesz użyć następującej składni. Aby uzyskać więcej informacji, zobacz to pytanie i odpowiedzi: Dodaj kolumnę z wartością domyślną do istniejącej tabeli w SQL Server

Składnia:

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Przykład:

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.

Innym sposobem:

Kliknij prawym przyciskiem myszy tabelę i kliknij opcję Projekt, a następnie kliknij kolumnę, w której chcesz ustawić wartość domyślną.

Następnie na dole strony dodaj wartość domyślną lub powiązanie: coś w rodzaju „1” dla ciągu lub 1 dla int.

1

Pierwsze ograniczenia kropli

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)

Po drugie utwórz wartość domyślną

ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
1
Mise

w przypadku, gdy ograniczenie już istnieje z domyślną nazwą:

-- 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;
0
tibx