将位列转换为整数

时间:2012-07-26 11:37:49

标签: sql sql-server

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

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

7 个答案:

答案 0 :(得分:27)

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

e.g。

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

您可以使用CONVERT(INT, columnName) AS IntValue

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

即。

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

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

答案 1 :(得分:2)

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

ALTER TableName ALTER COLUMN ColumnName INT

另外,仅出于显示目的,您可以使用CASTCONVERT功能:

CAST(columnName AS INT) AS IntegerVal
CONVERT(int, columnName) AS IntValue

答案 2 :(得分:1)

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

答案 3 :(得分: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语句来改变表列及其构造函数。

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

SELECT
  CAS(Bit_Column AS int) AS Int_Column
FROM
  YourTable

但是,我不确定我理解你想要达到的目标,如果你提供了更多细节,例如表格的结构及其约束,你可能会得到更好的答案。

答案 6 :(得分: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