26

我正在通过 SQL 脚本将特定表的位列转换为整数(该表对默认值有一些默认约束)。

我必须更改表的列,而不是运行时强制转换,可以使用什么脚本来完成此操作?

4

8 回答 8

44

尝试使用CAST(columnName AS INT) AS IntValue.

例如

SELECT columnName, CAST(columnName AS INT) AS IntValue
FROM table

或者你可以使用CONVERT(INT, columnName) AS IntValue.

更新:如果您需要更改表的实际元数据,那么您首先需要删除约束然后更改列:

IE

ALTER TABLE [Table] DROP CONSTRAINT [ConstraintName];
GO
ALTER TABLE [Table] ALTER COLUMN [ColumnName] INT;

然后重新创建您需要的任何约束。

于 2012-07-26T11:43:00.783 回答
3

如果您担心更改列的数据类型,可以使用 ALTER 查询,如下所示。

ALTER TableName ALTER COLUMN ColumnName INT

否则,仅出于显示目的,您可以使用CASTorCONVERT函数:

CAST(columnName AS INT) AS IntegerVal
CONVERT(int, columnName) AS IntValue
于 2012-07-26T11:52:30.817 回答
1

最后我设法让它工作:

ALTER TABLE tblname DROP CONSTRAINT DF_tbl_tblname_tblcol
ALTER TABLE tblname ALTER COLUMN tblcol int not null
ALTER TABLE tblname WITH NOCHECK ADD CONSTRAINT [DF_tbl_tblname_tblcol] DEFAULT (0) FOR tblcol

我已经使用上述 SQL 语句来更改表列及其构造函数。

于 2012-07-27T07:12:40.367 回答
1

我们不能简单地将 BIT 列更改为 INT。所以我建议在表中创建新的整数列,然后使用 CAST,用现有的位值更新新的整数列。最后,您可以从表中删除 BIT 列。

于 2012-07-26T11:57:55.883 回答
1

SELECT CONVERT(BIT,'False') AS test1 SELECT CONVERT(BIT,'True') AS test2

于 2015-04-10T10:39:04.793 回答
0

CAST()我相信您可以仅使用标准命令将位列提取为整数:

SELECT
  CAS(Bit_Column AS int) AS Int_Column
FROM
  YourTable

但是,我不确定我是否理解您要实现的目标,如果您提供更多详细信息(例如表的结构及其约束),您可能会得到更好的答案。

于 2012-07-26T11:45:08.083 回答
0

您收到与默认约束相关的错误。因此,您必须在更改列数据类型之前删除该约束...

试试这个来找到基于这个表的所有约束(你只需要在你的列上找到正确的默认值)或者使用SQL Server Management Studio (SSMS) 来为表生成脚本,这将具有默认的约束定义。

select * from sys.all_objects where parent_object_id  = object_id('<tablename>')
go

然后首先删除约束,然后更改列并再次添加默认值。

alter table bittoint drop constraint DF__bittoint__col2__45D500F0
go
alter table bittoint alter column col2 int
go
alter table bittoint add constraint DF__bittoint__col2__45D500F0 default 0 for col2
go
于 2012-07-26T12:07:48.513 回答
0

提供的解决方案都不适合我。我不得不使用有符号或无符号而不是 INT 例如

SELECT columnName, CAST(columnName AS SIGNED) AS IntValue FROM table

希望这对新用户有所帮助。

于 2021-11-29T11:59:35.897 回答