update - ¿Cómo puedo modificar esta columna calculada en SQL Server 2008?
update tabla temporal sql server (4)
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. Intento ingresar otra condición a la declaración de caso, pero no está funcionando.
¡Muchas gracias!
Algo como esto:
ALTER TABLE dbo.MyTable
DROP COLUMN OldComputedColumn
ALTER TABLE dbo.MyTable
ADD OldComputedColumn AS OtherColumn + 10
Como Michael Todd dice correctamente en su respuesta
Al modificar una columna calculada, lo único que puede hacer es soltarla y volver a agregarla.
Solo tuve 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 descartado y recreado la columna calculada.
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
Esta es una de esas situaciones en las que puede ser más fácil y más rápido simplemente usar la función de diagram de SQL Server Management Studio.
- Cree un nuevo diagrama, agregue su tabla y elija mostrar la columna de fórmula en la vista de tabla del diagrama.
- Cambia la fórmula de las columnas a una cadena vacía
('''')
o algo igualmente inocuo (probablemente de modo que no cambies el tipo de datos de la columna). - Guarde el diagrama (que debe guardar la tabla).
- Altere su función.
- Vuelva a colocar la función en la fórmula para esa columna.
- Ahorra una vez más.
Si lo hace de esta manera en SSMS, se conservará el orden de las columnas en su tabla, lo que un simple drop...add
no garantizará. Esto puede ser importante para algunos.
Si intentas cambiar una columna existente, no puedes usar ADD. En cambio, intente esto:
alterar la tabla tbPedidos alterar la columna de restricciones como (cast (caso cuando restricaoLicenca = 1 o restricaoLote = 1 o restricaoValor = 1 luego 1 else 0 terminar como bit))
EDITAR: Lo anterior es incorrecto . Al modificar una columna calculada , lo único que puede hacer es soltarla y volver a agregarla.