2012-07-26 15 views
9

Estoy convirtiendo las columnas de bits de una tabla en particular en un entero a través de un script SQL (esta tabla tiene algunas restricciones predeterminadas para el valor predeterminado).Convertir la columna de bit a entero

Debo alterar las columnas de la tabla, no la del tiempo de ejecución, ¿Qué secuencia de comandos se puede usar para lograr esto?

+0

hacer u haber cualquier defecto definido en la columna de la mesa? Para ver esto, intente ver la estructura create table – praveen

+0

, supongo que no puede usar Management Studio, ¿es correcto? – Alex

Respuesta

23

Intente utilizar CAST(columnName AS INT) AS IntValue.

p. Ej.

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

O puede utilizar CONVERT(INT, columnName) AS IntValue.

ACTUALIZACIÓN: Si necesita modificar los metadatos real de la tabla, a continuación, primero tiene que soltar las limitaciones a continuación, modificar la columna:

es decir

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

volver a crear todas las restricciones que necesitas.

+0

editado la pregunta, compruebe que quiero la declaración ddl no dml –

0

creo que podría extraer la columna de bits como un entero sólo por el uso estándar CAST() comando:

SELECT 
    CAS(Bit_Column AS int) AS Int_Column 
FROM 
    YourTable 

Sin embargo, no estoy seguro de entender lo que está tratando de lograr, probablemente usted podría conseguir una mejor respuesta si proporcionó más detalles, como la estructura de la tabla y sus restricciones.

+0

quiero cambiar la estructura de la tabla como tengo campos de bit para broleflag que tiene el valor predeterminado como falso ahora quiero cambiar el tipo de datos para esa columna de bit a entero y establecer la restricción predeterminada en 0 –

+0

Ahora está más claro. En tal caso, puede ver la respuesta publicada por? Esh, debería hacer lo que está buscando. Solo tiene que agregar la restricción al comando ALTER. – Diego

+0

ya lo he hecho, pero las restricciones predeterminadas asociadas al campo no me permiten alterar la columna de la tabla ... –

2

Si le preocupa cambiar el tipo de datos de la columna, puede usar una consulta ALTER de la siguiente manera.

ALTER TableName ALTER COLUMN ColumnName INT 

lo demás, sólo para fines de visualización, puede utilizar la función de CAST o CONVERT:

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

ya he usado este script alter, pero sin embargo cuando modifico esta tabla dice que tiene algunas limitaciones asociadas a la columna y no se puede modificar .. –

+0

lo siento, olvidé mencionarlo, si desea alterar una columna, la columna no debe contener cualquier valor y su tabla de dependencia también – Esh

1

No puede simplemente modificar la columna TBI a INT. Así que sugiero crear la nueva columna de enteros en la tabla y luego usar CAST, actualizar la nueva columna de enteros con los valores de bit existentes. Entonces, por fin, puedes soltar la columna BIT de la mesa.

+1

Puede modificar la columna de bit a int al menos en la versión 2008R2 .. –

0

Aparecerá un error relacionado con una restricción predeterminada. Por lo tanto, debe eliminar esa restricción antes de modificar el tipo de datos de la columna ...

Intente esto para encontrar todas las restricciones basadas en esta tabla (solo necesita encontrar el valor predeterminado adecuado en su columna) o use SQL Server Management Studio (SSMS) para generar el script para la tabla, y esto tendrá la definición de restricción predeterminada.

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

Luego, primero suelte la restricción y luego modifique la columna y agregue el valor predeterminado nuevamente.

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

fin he conseguido que funcione:

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 

He utilizado las sentencias SQL por encima de alterar la columna de la mesa junto con su constructor.

0

SELECT CONVERT (BIT, 'False') como Prueba1 SELECT CONVERT (BIT, 'True') AS test2

+0

esto es útil – Thaanuja