SQL Server 2008'de çalışmıyor:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
Hata:
'SET' anahtar kelimesinin yanında yanlış sözdizimi.
Neyi yanlış yapıyorum?
SQL Server 2008'de çalışmıyor:
ALTER TABLE Employee ALTER COLUMN CityBorn SET DEFAULT 'SANDNES'
Hata:
'SET' anahtar kelimesinin yanında yanlış sözdizimi.
Neyi yanlış yapıyorum?
Yanıtlar:
Bu SQL Server'da çalışacaktır:
ALTER TABLE Employee ADD CONSTRAINT DF_SomeName DEFAULT N'SANDNES' FOR CityBorn;
ALTER TABLE Employee ADD DEFAULT 'SANDNES' FOR CityBorn
bunun için değiştirme sütunu kullanılamaz, bunun yerine add'i kullanın
ALTER TABLE Employee
ADD DEFAULT('SANDNES') FOR CityBorn
Bunu yapmanın doğru yolu aşağıdaki gibidir:
Komutu çalıştırın:
sp_help [table name]
Öğesinin adını kopyalayın CONSTRAINT
.
Bırak DEFAULT CONSTRAINT
:
ALTER TABLE [table name] DROP [NAME OF CONSTRAINT]
Aşağıdaki komutu çalıştırın:
ALTER TABLE [table name] ADD DEFAULT [DEFAULT VALUE] FOR [NAME OF COLUMN]
Hoodaticus'un çözümü mükemmeldi, teşekkür ederim, ama aynı zamanda yeniden çalıştırılabilir olması gerekiyordu ve yapılıp yapılmadığını kontrol etmek için bu yolu buldum ...
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
Bir sütun için varsayılan değerin değiştirilebileceği iki senaryo vardır,
Sorgu
create table table_name
(
column_name datatype default 'any default value'
);
Bu durumda, SQL sunucum varolan varsayılan kısıtlama değerini değiştirmeye izin vermiyor. Bu nedenle, varsayılan değeri değiştirmek için, var olan sistem veya kullanıcı tarafından oluşturulan varsayılan kısıtlamayı silmemiz gerekir. Ve bundan sonra belirli bir sütun için varsayılan değer ayarlanabilir.
Bazı adımları izleyin:
Bu sistem veritabanı yordamını yürütün, tablo adını parametre olarak alır. Tablodaki tüm sütunlar için tüm kısıtlamaların listesini döndürür.
execute [dbo].[sp_helpconstraint] 'table_name'
Sözdizimi:
alter table 'table_name' drop constraint 'constraint_name'
Sözdizimi:
alter table 'table_name' add default 'default_value' for 'column_name'
alkış @ !!!
varsayılan adıyla bir kısıtlama zaten mevcutsa:
-- 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;
Aşağıdaki sözdizimini kullanabilirsiniz, Daha fazla bilgi için bu soruya ve yanıtlara bakın: SQL Server'da varolan bir tabloya varsayılan değeri olan bir sütun ekleme
Sözdizimi:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
Misal :
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.
Diğer yol :
Tabloya sağ tıklayın ve Tasarım'a tıklayın, ardından varsayılan değeri ayarlamak istediğiniz sütuna tıklayın.
Ardından sayfanın altına varsayılan bir değer veya bağlama ekleyin: dize için '1' veya int için 1 gibi bir şey.
Daha önce boş olan mevcut sütunu değiştirmek için 3 basit adım bulundu
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
İlk bırakma kısıtlamaları
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)
İkincisi varsayılan değer oluştur
ALTER TABLE [table name] ADD DEFAULT [default value] FOR [column name]
Aşağıdaki komutu deneyin;
ALTER TABLE Person11
ADD CONSTRAINT col_1_def
DEFAULT 'This is not NULL' FOR Address
Yuck'ın betiğin bir kereden fazla hatasız çalıştırılmasına izin veren bir onayla verdiği yanıt gibi. (information_schema.columns kullanmaktan daha az kod / özel dizgi)
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