Mam bazę danych SQL Server i właśnie zdałem sobie sprawę, że mogę zmienić typ jednej z kolumn z int
na bool
.
Jak mogę to zrobić bez utraty danych, które zostały już wprowadzone do tej tabeli?
Mam bazę danych SQL Server i właśnie zdałem sobie sprawę, że mogę zmienić typ jednej z kolumn z int
na bool
.
Jak mogę to zrobić bez utraty danych, które zostały już wprowadzone do tej tabeli?
Odpowiedzi:
Możesz to łatwo zrobić za pomocą następującego polecenia. Każda wartość 0 zostanie zamieniona na 0 (BIT = fałsz), wszystko inne zostanie zamienione na 1 (BIT = prawda).
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumnName BIT
Inną opcją byłoby utworzenie nowej kolumny typu BIT
, wypełnienie jej ze starej kolumny, a kiedy skończysz, upuść starą kolumnę i zmień nazwę nowej na starą. W ten sposób, jeśli coś podczas konwersji pójdzie nie tak, zawsze możesz wrócić, ponieważ nadal masz wszystkie dane.
NULL
pozostaje NULL
, 0
staje się False
, niezerowe wartości (1, -1, 1999, -987 ...) stają się True
.
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)
Uwaga: jeśli istnieje rozmiar kolumn, po prostu wpisz również rozmiar.
Jeśli jest to poprawna zmiana.
możesz zmienić właściwość.
Narzędzia -> Opcje -> Projektanci -> Projektanci tabel i baz danych -> Odznacz -> Zapobiegaj zapisywaniu zmian, które wymagały ponownego utworzenia tabeli.
Teraz możesz łatwo zmienić nazwę kolumny bez ponownego tworzenia tabeli lub utraty swoich rekordów.
Jak myślisz, dlaczego stracisz dane? Wystarczy przejść do Management Studio i zmienić typ danych. Jeśli istniejącą wartość można przekonwertować na bool (bit), zrobi to. Innymi słowy, jeśli „1” odwzoruje na true, a „0” odwzoruje na false w oryginalnym polu, nic ci nie będzie.
jeśli używasz T-SQL (MSSQL); powinieneś wypróbować ten skrypt:
ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)
jeśli używasz MySQL; powinieneś wypróbować ten skrypt:
ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)
jeśli korzystasz z Oracle; powinieneś wypróbować ten skrypt:
ALTER TABLE [Employee] MODIFY [Salary] NUMERIC(22,5)
Zmień typ danych kolumny z typem kontroli kolumny:
IF EXISTS(
SELECT 1
FROM sys.columns
WHERE NAME = 'YourColumnName'
AND [object_id] = OBJECT_ID('dbo.YourTable')
AND TYPE_NAME(system_type_id) = 'int'
)
ALTER TABLE dbo.YourTable ALTER COLUMN YourColumnName BIT
dla mnie, na serwerze SQL 2016, robię to w ten sposób
* Aby zmienić nazwę kolumny Kolumna1 na Kolumna2
EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'
* Aby zmodyfikować typ kolumny z ciągu na int :( Upewnij się, że dane mają poprawny format )
ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2 int;
Mogę zmodyfikować typ danych pola tabeli za pomocą następującego zapytania: a także w Oracle DB,
ALTER TABLE table_name
MODIFY column_name datatype;
Zamień typ danych bez utraty danych
alter table tablename modify columnn newdatatype(size);