2012-07-26 96 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