Hoe kan ik een kolom met een standaardwaarde toevoegen aan een bestaande tabel in SQL Server 2000/ SQL Server 2005?
Antwoord 1, autoriteit 100%
Syntaxis:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES
Voorbeeld:
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.
Opmerkingen:
Optionele beperkingsnaam:
Als u CONSTRAINT D_SomeTable_SomeCol
weglaat, zal SQL Server automatisch genereren
een Default-Contraint met een grappige naam zoals: DF__SomeTa__SomeC__4FB7FEF6
Optionele verklaring met waarden:
De WITH VALUES
is alleen nodig als uw kolom Nullable is
en u wilt dat de standaardwaarde wordt gebruikt voor bestaande records.
Als uw kolom NOT NULL
is, gebruikt deze automatisch de standaardwaarde
voor alle bestaande records, of u nu WITH VALUES
opgeeft of niet.
Hoe invoegingen werken met een standaardbeperking:
Als u een record invoegt in SomeTable
en nietde waarde van SomeCol
opgeeft, wordt deze standaard ingesteld op 0
.
Als u een record invoegt ende waarde van SomeCol
opgeeft als NULL
(en uw kolom staat nulls toe),< br>
dan wordt de Default-Constraint nietgebruikt en wordt NULL
als waarde ingevoegd.
De opmerkingen zijn gebaseerd op de geweldige feedback van iedereen hieronder.
Speciale dank aan:
@Yatrix, @WalterStabosz, @YahooSerious en @StackMan voor hun opmerkingen.
Antwoord 2, autoriteit 29%
ALTER TABLE Protocols
ADD ProtocolTypeID int NOT NULL DEFAULT(1)
GO
Het opnemen van de DEFAULTvult de kolom in bestaanderijen met de standaardwaarde, zodat de NOT NULL-beperking niet wordt geschonden.
Antwoord 3, autoriteit 7%
Bij het toevoegen van een kolom met nulling, zorgt WITH VALUES
ervoor dat de specifieke DEFAULT-waarde wordt toegepast op bestaande rijen:
ALTER TABLE table
ADD column BIT -- Demonstration with NULL-able column added
CONSTRAINT Constraint_name DEFAULT 0 WITH VALUES
Antwoord 4, autoriteit 4%
ALTER TABLE <table name>
ADD <new column name> <data type> NOT NULL
GO
ALTER TABLE <table name>
ADD CONSTRAINT <constraint name> DEFAULT <default value> FOR <new column name>
GO
Antwoord 5, autoriteit 4%
ALTER TABLE MYTABLE ADD MYNEWCOLUMN VARCHAR(200) DEFAULT 'SNUGGLES'
Antwoord 6, autoriteit 3%
De meest eenvoudige versie met slechts twee regels
ALTER TABLE MyTable
ADD MyNewColumn INT NOT NULL DEFAULT 0
Antwoord 7, autoriteit 3%
Pas op wanneer de kolom die u toevoegt een NOT NULL
-beperking heeft, maar geen DEFAULT
-beperking (waarde). De instructie ALTER TABLE
zal in dat geval mislukken als de tabel rijen bevat. De oplossing is om ofwel de NOT NULL
-beperking uit de nieuwe kolom te verwijderen, of er een DEFAULT
-beperking voor op te geven.
Antwoord 8, autoriteit 2%
Gebruik:
-- Add a column with a default DateTime
-- to capture when each record is added.
ALTER TABLE myTableName
ADD RecordAddedDate SMALLDATETIME NULL DEFAULT (GETDATE())
GO
Antwoord 9, autoriteit 2%
Als u meerdere kolommen wilt toevoegen, kunt u dit bijvoorbeeld op deze manier doen:
ALTER TABLE YourTable
ADD Column1 INT NOT NULL DEFAULT 0,
Column2 INT NOT NULL DEFAULT 1,
Column3 VARCHAR(50) DEFAULT 'Hello'
GO
Antwoord 10, autoriteit 2%
Gebruik:
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
Referentie: ALTER TABLE (Transact-SQL)(MSDN)
Antwoord 11, autoriteit 2%
Om een kolom toe te voegen aan een bestaande databasetabel met een standaardwaarde, kunnen we gebruiken:
ALTER TABLE [dbo.table_name]
ADD [Column_Name] BIT NOT NULL
Default ( 0 )
Hier is een andere manier om een kolom toe te voegen aan een bestaande databasetabel met een standaardwaarde.
Een veel grondiger SQL-script om een kolom toe te voegen met een standaardwaarde staat hieronder, inclusief controleren of de kolom bestaat voordat u deze toevoegt, ook de beperking controleren en deze verwijderen als die er is. Dit script geeft ook een naam aan de beperking, zodat we een mooie naamgevingsconventie kunnen hebben (ik hou van DF_) en als dat niet het geval is, zal SQL ons een beperking geven met een naam die een willekeurig gegenereerd nummer heeft; dus het is fijn om de beperking ook een naam te kunnen geven.
-------------------------------------------------------------------------
-- Drop COLUMN
-- Name of Column: Column_EmployeeName
-- Name of Table: table_Emplyee
--------------------------------------------------------------------------
IF EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_Emplyee'
AND COLUMN_NAME = 'Column_EmployeeName'
)
BEGIN
IF EXISTS ( SELECT 1
FROM sys.default_constraints
WHERE object_id = OBJECT_ID('[dbo].[DF_table_Emplyee_Column_EmployeeName]')
AND parent_object_id = OBJECT_ID('[dbo].[table_Emplyee]')
)
BEGIN
------ DROP Contraint
ALTER TABLE [dbo].[table_Emplyee] DROP CONSTRAINT [DF_table_Emplyee_Column_EmployeeName]
PRINT '[DF_table_Emplyee_Column_EmployeeName] was dropped'
END
-- ----- DROP Column -----------------------------------------------------------------
ALTER TABLE [dbo].table_Emplyee
DROP COLUMN Column_EmployeeName
PRINT 'Column Column_EmployeeName in images table was dropped'
END
--------------------------------------------------------------------------
-- ADD COLUMN Column_EmployeeName IN table_Emplyee table
--------------------------------------------------------------------------
IF NOT EXISTS (
SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'table_Emplyee'
AND COLUMN_NAME = 'Column_EmployeeName'
)
BEGIN
----- ADD Column & Contraint
ALTER TABLE dbo.table_Emplyee
ADD Column_EmployeeName BIT NOT NULL
CONSTRAINT [DF_table_Emplyee_Column_EmployeeName] DEFAULT (0)
PRINT 'Column [DF_table_Emplyee_Column_EmployeeName] in table_Emplyee table was Added'
PRINT 'Contraint [DF_table_Emplyee_Column_EmployeeName] was Added'
END
GO
Dit zijn twee manieren om een kolom toe te voegen aan een bestaande databasetabel met een standaardwaarde.
Antwoord 12
Je kunt het op de volgende manier doen met T-SQL.
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
U kunt ook SQL Server Management Studiogebruiken door met de rechtermuisknop te klikken op de tabel in de Design menu, waarbij u de standaardwaarde instelt op tabel.
En verder, als u dezelfde kolom (als deze niet bestaat) aan alle tabellen in de database wilt toevoegen, gebruik dan:
USE AdventureWorks;
EXEC sp_msforeachtable
'PRINT ''ALTER TABLE ? ADD Date_Created DATETIME DEFAULT GETDATE();''' ;
Antwoord 13
In SQL Server 2008-R2 ga ik naar de ontwerpmodus – in een testdatabase – en voeg mijn twee kolommen toe met behulp van de ontwerper en maak de instellingen met de GUI, en vervolgens de beruchte Rechtsklik kbd>geeft de optie "Genereer wijzigingsscript"!
Bang up opent een klein venster met, je raadt het al, het correct geformatteerde, gegarandeerd werkend wijzigingsscript. Druk op de makkelijke knop.
Antwoord 14
U kunt ook een standaardwaarde toevoegen zonder de beperking expliciet een naam te geven:
ALTER TABLE [schema].[tablename] ADD DEFAULT ((0)) FOR [columnname]
Als u een probleem heeft met bestaande standaardbeperkingen bij het maken van deze beperking, kunnen deze worden verwijderd door:
alter table [schema].[tablename] drop constraint [constraintname]
Antwoord 15
Dit kan ook in de SSMS GUI worden gedaan. Ik laat hieronder een standaarddatum zien, maar de standaardwaarde kan natuurlijk van alles zijn.
- Zet uw tafel in ontwerpweergave (klik met de rechtermuisknop op de tafel in object
verkenner->Design) - Voeg een kolom toe aan de tabel (of klik op de kolom die u wilt bijwerken als
het bestaat al) - Voer in Kolomeigenschappen hieronder
(getdate())
of'abc'
of0
of welke waarde dan ook in in Standaardwaarde of Bindendveld zoals hieronder afgebeeld:
Antwoord 16
ALTER TABLE ADD ColumnName {Column_Type} Constraint
Het MSDN-artikel ALTER TABLE (Transact-SQL)heeft alle syntaxis van de alter-tabel.
Antwoord 17
Voorbeeld:
ALTER TABLE [Employees] ADD Seniority int not null default 0 GO
Antwoord 18
Voorbeeld:
ALTER TABLE tes
ADD ssd NUMBER DEFAULT '0';
Antwoord 19
Maak eerst een tabel met naam leerling:
CREATE TABLE STUDENT (STUDENT_ID INT NOT NULL)
Voeg er één kolom aan toe:
ALTER TABLE STUDENT
ADD STUDENT_NAME INT NOT NULL DEFAULT(0)
SELECT *
FROM STUDENT
De tabel wordt gemaakt en er wordt een kolom toegevoegd aan een bestaande tabel met een standaardwaarde.
Antwoord 20
Dit heeft veel antwoorden, maar ik voel de behoefte om deze uitgebreide methode toe te voegen. Dit lijkt veel langer, maar het is erg handig als je een NOT NULL-veld toevoegt aan een tabel met miljoenen rijen in een actieve database.
ALTER TABLE {schemaName}.{tableName}
ADD {columnName} {datatype} NULL
CONSTRAINT {constraintName} DEFAULT {DefaultValue}
UPDATE {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
ALTER TABLE {schemaName}.{tableName}
ALTER COLUMN {columnName} {datatype} NOT NULL
Wat dit zal doen, is de kolom toevoegen als een nullable-veld en met de standaardwaarde alle velden bijwerken naar de standaardwaarde (of u kunt meer betekenisvolle waarden toewijzen), en uiteindelijk zal de kolom worden gewijzigd in NOT NULL.
De reden hiervoor is dat als u een grote tabel bijwerkt en een nieuw niet-null-veld toevoegt, het naar elke afzonderlijke rij moet schrijven en hierbij de hele tabel zal vergrendelen terwijl het de kolom toevoegt en vervolgens alle waarden schrijft.
Deze methode voegt de nullable-kolom toe, die op zichzelf veel sneller werkt, en vult vervolgens de gegevens voordat de niet-null-status wordt ingesteld.
Ik heb ontdekt dat als je alles in één statement doet, een van onze meer actieve tabellen 4-8 minuten wordt geblokkeerd en heel vaak heb ik het proces afgebroken. Deze methode duurt meestal slechts een paar seconden en veroorzaakt minimale vergrendeling.
Bovendien, als u een tabel heeft in de buurt van miljarden rijen, kan het de moeite waard zijn om de update als volgt te batchen:
WHILE 1=1
BEGIN
UPDATE TOP (1000000) {schemaName}.{tableName}
SET {columnName} = {DefaultValue}
WHERE {columName} IS NULL
IF @@ROWCOUNT < 1000000
BREAK;
END
Antwoord 21
Probeer dit
ALTER TABLE Product
ADD ProductID INT NOT NULL DEFAULT(1)
GO
Antwoord 22
SQL Server + Tabel wijzigen + Kolom toevoegen + Standaardwaarde uniqueidentifier
ALTER TABLE Product
ADD ReferenceID uniqueidentifier not null
default (cast(cast(0 as binary) as uniqueidentifier))
Antwoord 23
IF NOT EXISTS (
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME ='TABLENAME' AND COLUMN_NAME = 'COLUMNNAME'
)
BEGIN
ALTER TABLE TABLENAME ADD COLUMNNAME Nvarchar(MAX) Not Null default
END
Antwoord 24
--Adding Value with Default Value
ALTER TABLE TestTable
ADD ThirdCol INT NOT NULL DEFAULT(0)
GO
Antwoord 25
Dit is voor SQL Server:
ALTER TABLE TableName
ADD ColumnName (type) -- NULL OR NOT NULL
DEFAULT (default value)
WITH VALUES
Voorbeeld:
ALTER TABLE Activities
ADD status int NOT NULL DEFAULT (0)
WITH VALUES
Als u beperkingen wilt toevoegen:
ALTER TABLE Table_1
ADD row3 int NOT NULL
CONSTRAINT CONSTRAINT_NAME DEFAULT (0)
WITH VALUES
Antwoord 26
Een nieuwe kolom aan een tabel toevoegen:
ALTER TABLE [table]
ADD Column1 Datatype
Bijvoorbeeld
ALTER TABLE [test]
ADD ID Int
Als de gebruiker het automatisch wil laten verhogen, dan:
ALTER TABLE [test]
ADD ID Int IDENTITY(1,1) NOT NULL
Antwoord 27
Dit kan met de onderstaande code.
CREATE TABLE TestTable
(FirstCol INT NOT NULL)
GO
------------------------------
-- Option 1
------------------------------
-- Adding New Column
ALTER TABLE TestTable
ADD SecondCol INT
GO
-- Updating it with Default
UPDATE TestTable
SET SecondCol = 0
GO
-- Alter
ALTER TABLE TestTable
ALTER COLUMN SecondCol INT NOT NULL
GO
Antwoord 28
Probeer het met de onderstaande vraag:
ALTER TABLE MyTable
ADD MyNewColumn DataType DEFAULT DefaultValue
Hiermee wordt een nieuwe kolom aan de tabel toegevoegd.
Antwoord 29
ALTER TABLE tbl_table ADD int_column int NOT NULL DEFAULT(0)
Vanuit deze query kun je een kolom van datatype integer met standaardwaarde 0 toevoegen.
Antwoord 30
Nou, ik heb nu een wijziging in mijn vorige antwoord. Ik heb gemerkt dat geen van de genoemde antwoorden IF NOT EXISTS
. Dus ik ga er een nieuwe oplossing voor bieden, omdat ik problemen heb ondervonden bij het wijzigen van de tabel.
IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.columns WHERE table_name = 'TaskSheet' AND column_name = 'IsBilledToClient')
BEGIN
ALTER TABLE dbo.TaskSheet ADD
IsBilledToClient bit NOT NULL DEFAULT ((1))
END
GO
Hier is TaskSheet
de specifieke tabelnaam en IsBilledToClient
is de nieuwe kolom die u gaat invoegen en 1
de standaardwaarde. Dat betekent in de nieuwe kolom wat de waarde van de bestaande rijen zal zijn, daarom wordt er daar automatisch een ingesteld. U kunt echter naar wens wijzigen met respect voor het kolomtype zoals ik BIT
heb gebruikt, dus ik heb standaardwaarde 1 ingevoerd.
Ik raad het bovenstaande systeem aan, omdat ik een probleem heb ondervonden. Dus wat is het probleem? Het probleem is dat als de kolom IsBilledToClient
in de tabeltabel bestaat, als u alleen het gedeelte van de onderstaande code uitvoert, u een fout ziet in de SQL-server Querybuilder. Maar als het niet bestaat, zal er voor de eerste keer geen fout zijn bij het uitvoeren.
ALTER TABLE {TABLENAME}
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL}
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
[WITH VALUES]