Pregunta

Tengo una tabla con varios campos de las cuentas de esta manera:

MAIN_ACCT
GROUP_ACCT
SUB_ACCT

A menudo necesito para combinarlos como esto:

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT
FROM ACCOUNT_TABLE

Me gustaría un campo calculado que automáticamente hace esto, así que sólo puedo decir:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE

¿Cuál es la mejor manera de hacer esto?

Estoy usando SQL Server 2005.

¿Fue útil?

Solución

ALTER TABLE ACCOUNT_TABLE 
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED

Esta persistirá una columna calculada y puede funcionar mejor en selecciona de un cálculo a la vista o UDF si tiene un gran número de registros (una vez la creación intial de la columna ha ocurrido que puede ser muy lento y probablemente debería suceder durante tiempos de uso bajos). Que se ralentizará inserciones y actualizaciones. Por lo general, me encuentro con una inserción o actualización lenta es mejor tolerada por los usuarios de un retraso en un selecto a menos que obtenga los problemas de bloqueo.

El mejor método para hacer esto dependerá en gran medida de su uso y qué tipo de rendimiento que necesita. Si usted no tiene una gran cantidad de registros o si la columna calculada no se llamará que, con frecuencia, puede que no quiera una columna PERSISTED, pero si usted está ejecutando con frecuencia informes con todos los registros para el año u otros grandes conjuntos de datos, es posible encontrar la columna calculada persistido funciona mejor para usted. Al igual que con cualquier tarea de esta naturaleza, la única manera de saber lo que funciona mejor en su situación es poner a prueba.

Otros consejos

Este es un gran candidato para una vista.

CREATE VIEW vwACCOUNT_TABLE
AS

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT AS ACCT_NUMBER 
FROM ACCOUNT_TABLE

GO

--now select from the View
SELECT ACCT_NUMBER FROM  vwACCOUNT_TABLE
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;

la columna no se conserva en la tabla, se volverá a crear en el lugar de CLY cada vez que se hace referencia a ella. Se puede conseguir el mismo resultado mediante el uso de una vista. Si utiliza predicados de filtro u ordenar en la columna calculada y desea añadir un índice en que ver Crear índices en columnas calculadas .

Bueno, se podría crear una vista de la ACCOUNT_TABLE y consulta que. O creo que se podría crear una función definida por el usuario que lograr lo mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top