¿Cómo puedo alterar esta columna calculada en SQL Server 2008?


Tengo una columna calculada creada con la siguiente línea:

alter table tbPedidos 
add restricoes as (cast(case when restricaoLicenca = 1 or restricaoLote = 1 then 1 else 0 end as bit))

Pero, ahora necesito cambiar esta columna por algo como:

alter table tbPedidos 
alter column restricoes as (cast(case when restricaoLicenca = 1 or restricaoLote = 1 or restricaoValor = 1 then 1 else 0 end as bit))

Pero no está funcionando. Estoy tratando de introducir otra condición a la declaración del caso, pero no está funcionando.

Muchas Gracias!

Author: Leniel Maccaferri, 2010-03-03

4 answers

Si está intentando cambiar una columna existente, no puede usar AGREGAR. En su lugar, prueba esto:

cambiar la tabla tbPedidos alter column restricoes as (cast (case when restricaoLicenca = 1 or restricaoLote = 1 or restricaoValor = 1 entonces 1 else 0 termina como bit))

EDITAR: Lo anterior es incorrecto. Al alterar una columna calculada, lo único que puede hacer es soltarla y volver a agregarla.

 58
Author: Michael Todd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-04 00:26:16

Algo como esto:

ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn

ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10

Fuente

 58
Author: Leniel Maccaferri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-01 19:52:08

Esta es una de esas situaciones en las que puede ser más fácil y rápido usar la función diagram de SQL Server Management Studio.

  1. Cree un diagrama nuevo, agregue su tabla y elija mostrar la columna de fórmula en la vista de tabla del diagrama.
  2. Cambie la fórmula de columnas a una cadena vacía ('') o algo igualmente inocuo (probablemente tal que no cambie el tipo de datos de la columna).
  3. Guarde el diagrama (que debería guardar la tabla).
  4. Alter tu función.
  5. Vuelva a poner la función en la fórmula para esa columna.
  6. Guardar una vez más.

Hacerlo de esta manera en SSMS retendrá el orden de las columnas en su tabla, que un simple drop...add no garantizará. Esto puede ser importante para algunos.

 2
Author: Tim Lehner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-24 19:51:30

Como Michael Todd afirma correctamente en su respuesta

Al alterar una columna calculada lo único que puedes hacer es soltarla y vuelve a añadirlo.

Solo tenía que hacer esto yo mismo, aunque quería preservar los datos existentes (como hace Management Studio cuando realiza esta tarea a través del diseñador).

Mi solución fue almacenar los datos en una tabla temporal y luego actualizar la tabla con los valores almacenados después de haber caído y recreado el calculado columna.

SELECT IDKey, Value
INTO #Temp
FROM MyTable

ALTER TABLE MyTable
DROP COLUMN Value

ALTER TABLE MyTable
ADD Value nvarchar(max) NULL

UPDATE MyTable
SET Value = #Temp.Value
FROM
MyTable
INNER JOIN #Temp ON #Temp.IDKey= MyTable.IDkey
 -2
Author: Amicable,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:27