2012-07-26 132 views
9

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

我必须改变表的列,而不是运行时转换,可以使用哪些脚本来实现这一点?

+0

不要ü有任何默认的表列定义?为了看到这个尝试看到创建表结构 – praveen 2012-07-26 12:07:24

+0

我假设你不能使用管理工作室,这是否正确? – Alex 2012-07-26 12:31:17

回答

23

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

例如

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

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

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

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

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

+0

编辑的问题,请检查我想ddl语句不是dml – 2012-07-26 11:49:28

0

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

SELECT 
    CAS(Bit_Column AS int) AS Int_Column 
FROM 
    YourTable 

不过,我不知道我知道你想达到什么样的,也许你可以得到如果您提供了更多详细信息(如表格的结构和约束条件),则可以获得更好的答案。

+0

我想改变表的结构,就像我有位字段的broleflag,它的默认值为false现在我想要将该列的数据类型从位更改为整数并将默认约束设置为0 – 2012-07-26 11:50:33

+0

现在更清晰了。在这种情况下,你可以看看?Esh发布的答案,它应该做你正在寻找的东西。您只需将约束添加到ALTER命令。 – Diego 2012-07-26 11:54:32

+0

我已经这样做了,但与该字段相关的默认约束不允许我更改表列。 – 2012-07-26 12:07:08

2

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

ALTER TableName ALTER COLUMN ColumnName INT 

否则,仅用于显示的目的,你可以使用该CASTCONVERT功能:

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

我已经使用这个改变脚本,但是当我改变这个表时,它说有一些与列相关的约束,不能改变.. – 2012-07-26 11:54:00

+0

抱歉忘了提及你,如果你想改变列,列不应该包含任何值及其依赖关系表也 – Esh 2012-07-26 13:29:54

1

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

+1

您可以在2008R2版本中将位列更改为至少int .. – 2012-07-26 12:24:08

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 
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语句与它的构造以及修改表列。

0

SELECT CONVERT(BIT, '假')为Test1 SELECT CONVERT(BIT, '真')AS test2的

+0

这是一个有用的 – Thaanuja 2015-04-10 10:47:02