2009-08-13 10 views
14

Tengo una tabla con varios campos de las cuentas de este tipo:¿Cómo puedo configurar un campo calculado simple en SQL Server?

MAIN_ACCT 
GROUP_ACCT 
SUB_ACCT 

a menudo necesito 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 solo puede decir:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE 

¿Cuál es la mejor manera de hacerlo?

estoy usando SQL Server 2005.

Respuesta

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

Este 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 dolorosamente lento y probablemente debería ocurrir durante tiempos de uso bajo). Disminuirá las inserciones y actualizaciones. Por lo general, los usuarios topan con una inserción o actualización lenta que una demora en una selección a menos que tenga 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 no tiene muchos registros o si la columna calculada no se llamará con tanta frecuencia, es posible que no desee una columna persistente, pero si está ejecutando con frecuencia informes con todos los registros del año u otros conjuntos grandes de datos, puede encontrar que la columna calculada persistente funciona mejor para usted. Como con cualquier tarea de esta naturaleza, la única forma de saber qué funciona mejor en su situación es probar.

+0

Genial, útil aún para mí bastantes años después. – enderland

3

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

8

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 
+0

Ugh. Debe haberme vencido por segundos. heh – DavidStein

5
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. Puede lograr el mismo resultado usando una vista. Si usa predicados de filtrado u ordena en la columna calculada y desea agregar un índice en él, vea Creating Indexes on Computed Columns.

+2

Puede continuar la columna y no perder tiempo recomponiendo lo que tendría que hacer en una vista. Persistimos en el nuestro porque el ligero retraso en el cambio de los datos es mucho mejor que el largo retraso siempre que queremos consultar la información. También puede indexar la columna si persistió – HLGEM

+0

Siempre que sepa la columna persistente al realizar el mantenimiento en el proyecto. Si no lo eres, aquí es donde podrían ocurrir los problemas. – Coops

Cuestiones relacionadas