Tôi có cơ sở dữ liệu SQL Server và tôi nhận ra rằng tôi có thể thay đổi loại của một trong các cột từ int
sang bool
.
Làm thế nào tôi có thể làm điều đó mà không làm mất dữ liệu đã được nhập vào bảng đó?
Tôi có cơ sở dữ liệu SQL Server và tôi nhận ra rằng tôi có thể thay đổi loại của một trong các cột từ int
sang bool
.
Làm thế nào tôi có thể làm điều đó mà không làm mất dữ liệu đã được nhập vào bảng đó?
Câu trả lời:
Bạn có thể dễ dàng làm điều này bằng cách sử dụng lệnh sau đây. Mọi giá trị 0 sẽ được chuyển thành 0 (BIT = false), mọi thứ khác sẽ được chuyển thành 1 (BIT = true).
ALTER TABLE dbo.YourTable
ALTER COLUMN YourColumnName BIT
Tùy chọn khác sẽ là tạo một cột kiểu mới BIT
, điền nó vào cột cũ và sau khi bạn hoàn thành, thả cột cũ và đổi tên cột mới thành tên cũ. Theo cách đó, nếu có gì đó trong quá trình chuyển đổi bị lỗi, bạn luôn có thể quay lại vì bạn vẫn có tất cả dữ liệu ..
NULL
vẫn còn NULL
, 0
trở thành False
, các giá trị khác không (1, -1, 1999, -987 ...) trở thành True
.
ALTER TABLE tablename
ALTER COLUMN columnname columndatatype(size)
Lưu ý: nếu có kích thước cột, chỉ cần viết kích thước cũng được.
Nếu đó là một thay đổi hợp lệ.
bạn có thể thay đổi tài sản.
Công cụ -> Tùy chọn -> Nhà thiết kế -> Nhà thiết kế bảng và cơ sở dữ liệu -> Bỏ chọn -> Ngăn chặn thay đổi yêu cầu tạo lại bảng.
Bây giờ bạn có thể dễ dàng thay đổi tên cột mà không cần tạo lại bảng hoặc mất các bản ghi ur.
Tại sao bạn nghĩ rằng bạn sẽ mất dữ liệu? Chỉ cần vào Management Studio và thay đổi kiểu dữ liệu. Nếu giá trị hiện tại có thể được chuyển đổi thành bool (bit), nó sẽ làm điều đó. Nói cách khác, nếu ánh xạ "1" thành ánh xạ đúng và "0" thành sai trong trường ban đầu của bạn, bạn sẽ ổn.
nếu bạn sử dụng T-SQL (MSSQL); bạn nên thử kịch bản này:
ALTER TABLE [Employee] ALTER COLUMN [Salary] NUMERIC(22,5)
nếu bạn sử dụng MySQL; bạn nên thử kịch bản này:
ALTER TABLE [Employee] MODIFY COLUMN [Salary] NUMERIC(22,5)
nếu bạn sử dụng Oracle; bạn nên thử kịch bản này:
ALTER TABLE [Employee] MODIFY [Salary] NUMERIC(22,5)
Chuyển đến Trình thiết kế công cụ-tùy chọn-nhà thiết kế-bảng và cơ sở dữ liệu và bỏ chọn Tùy chọn lưu
Thay đổi kiểu dữ liệu cột với loại kiểm tra của cột:
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
Đối với tôi, trong máy chủ sql 2016, tôi làm như thế này
* Để đổi tên cột Cột1 thành cột2
EXEC sp_rename 'dbo.T_Table1.Column1', 'Column2', 'COLUMN'
* Để sửa đổi Loại cột từ chuỗi thành int :( Hãy chắc chắn rằng dữ liệu ở định dạng chính xác )
ALTER TABLE dbo.T_Table1 ALTER COLUMN Column2 int;
Thay thế kiểu dữ liệu mà không mất dữ liệu
alter table tablename modify columnn newdatatype(size);