en lugar de calcular lo que el apellido es cada vez que desee ejecutar la consulta, se puede tener una columna calculada que persiste el valor real en una columna que puede ser utilizado como lo haría con cualquier otra columna.
ALTER TABLE Customer
ADD LastName AS
RIGHT(FullName, CHARINDEX(' ', REVERSE(FullName)) - 1) PERSISTED
esto se suma la columna LastName a su tabla de clientes, utiliza la función especificada para calcular el valor del último nombre, y lo almacena en la tabla física. La palabra clave PERSISTED al final es necesaria para que el valor se guarde en el disco; de lo contrario, se computará cada vez que se ejecute una consulta.
Editar: Para hacer frente a los valores sin espacios:
ALTER TABLE Customer
ADD LastName AS
case when CHARINDEX(' ', REVERSE(FullName)) > 0
then RIGHT(FullName, CHARINDEX(' ', REVERSE(FullName)) - 1)
else
FullName
end
PERSISTED
Aunque se puede jugar con esta función que le servirán para determinar lo que ocurre en este caso. Mi punto es mostrar que las declaraciones de casos se pueden usar. También es posible que desee convertir todas las rutas de salida al mismo tipo para evitar desajustes de tipos.
Definir apellido. Mi nombre es "Robert Henry Smith". –
@Dominic: Probablemente tenga que ser la última palabra del siguiente carácter de espacio. Por supuesto, habrá excepciones, pero eso probablemente funcione para la mayoría de los nombres. – FrustratedWithFormsDesigner
He aclarado en la pregunta. – GateKiller