Re: Spalte mit Default-Constraint löschen
- From: Elmar Boye <ElmarB@xxxxxxx>
- Date: Thu, 11 Sep 2008 10:39:18 +0200
Hallo Jürg,
Jürg Danuser schrieb:
> In der Newsgroup der Datenbank-Entwickler konnte mir niemand helfen,
> vielleicht weiss es hier jemand:
Da bin ich die letzten Tage nicht reingekommen...
Bei einer Umsetzung mit ADO.NET kannst Du Dir die Variable
@sql und das EXEC schenken, und die Befehle via StringBuilder
erstellen und mit ExecuteNonQuery() ausführen.
Ich habe eine Tabelle in der eine Spalte gelöscht werden muss. Diese
Spalte hat bei einigen Datenbanken einen Defaultwert bei anderen
nicht. Zusätzlich schwierig wirds, da der Name für den Defaultwert
dynamisch generiert wurde, das heisst von DB zu DB ist die
Bezeichnung anders.
Für die Zukunft wäre es besser solche Einschränkungen mit Namen
anzugeben, siehe im Beispiel für die Spalte Daten1
Ich brauche nun ein SQL-Script, welches diese Spalte löscht. Gibt es
eine Möglichkeit eine Spalte zu löschen und es werden alle abhängigen
Constraints ebenfalls mitgelöscht?
Unten ein Skript für SQL SErver 2005 und später.
Für ältere Versionen müsste mit syscolumns und sysobjects
Tabellen gearbeitet werden - Skript bei Bedarf.
Gruß Elmar
--
DROP TABLE dbo.Tabelle
GO
CREATE TABLE dbo.Tabelle
(
id int not null identity(1, 1) PRIMARY KEY,
daten1 nvarchar(40) NOT NULL
-- benannte Default (DF_Tabelle_Spalte)
CONSTRAINT DF_Tabelle_Daten1 DEFAULT (N'daten1'),
daten2 nvarchar(40) NOT NULL DEFAULT (N'daten2')
)
GO
DECLARE @tablename nvarchar(259)
DECLARE @columnname sysname
DECLARE @defaultname sysname
-- Tabelle hier bereits mit Schema + Quotes
SET @tablename = N'[dbo].[Tabelle]'
SET @columnname = N'daten2'
SELECT @defaultname = dc.name
FROM sys.default_constraints AS dc
INNER JOIN sys.columns AS c
ON dc.object_id = c.default_object_id
WHERE c.object_id = OBJECT_ID(@tablename)
AND c.name = @columnname
DECLARE @sql nvarchar(max)
-- DEFAULT löschen
IF @defaultname IS NOT NULL
BEGIN
PRINT 'Default: ' + @defaultname
SET @sql = N'ALTER TABLE ' + @tablename
+ N' DROP CONSTRAINT ' + QUOTENAME(@defaultname)
-- PRINT @sql
EXEC (@sql)
END
-- Spalte löschen
SET @sql = N'ALTER TABLE ' + @tablename
+ N' DROP COLUMN ' + QUOTENAME(@columnname)
-- PRINT @sql
EXEC (@sql)
-- Ergebnis
EXEC sp_help @tablename
GO
.
- References:
- Spalte mit Default-Constraint löschen
- From: Jürg Danuser
- Spalte mit Default-Constraint löschen
- Prev by Date: Re: Column Date-Time trennen
- Next by Date: Meinung der Experten!
- Previous by thread: Re: Spalte mit Default-Constraint löschen
- Next by thread: Einige Zugriffe auf MSSQL sehr langsam
- Index(es):
Relevant Pages
|