Estoy usando un servidor SQL y quiero crear un procedimiento almacenado que si coincide con un cierto valor, cambia el valor de los datos, por ejemplo:

CREATE PROCEDURE [dbo].[usp_GetAnimals] 
AS
SET NOCOUNT ON;
SELECT DISTINCT AnimalId,AnimalName,etc from [dbo].[Animals] order by AnimalName

Lo que quiero es: Si encuentro, por ejemplo, un animal cuyo nombre es león, ¿cambiarlo a León u otro nombre?

if(AnimalName == 'lion'){
    AnimalName = 'Lion Abc12'
}

Algo así pero en un procedimiento almacenado. ¿Puedo hacerlo con un procedimiento almacenado y cómo? Por cierto, no puedo cambiar los valores directamente en la base de datos, así que por eso pienso en este enfoque, ¿qué harías?

No quiero usar mayúsculas, sino cambiarlo a otro valor diferente.

Gracias

1
Angel Silva 20 feb. 2018 a las 23:00

2 respuestas

La mejor respuesta

Algo como esto le permitiría configurar los valores que desee adaptar

CREATE PROCEDURE [dbo].[usp_GetAnimals] 
AS
SET NOCOUNT ON;
SELECT DISTINCT AnimalId,
case 
    when AnimalName='Lion' and pk=1 and fk=2 then 'Lion (Extra Large)'
    when AnimalName='Lion' and pk=4 and fk=1 then 'Lioness'
    when AnimalName='Lion' then 'Default Lion'
    when AnimalName='Aardvark' then 'Aaaaardvark'
    when AnimalName='Poacher' then 'Target'
    else AnimalName end as AnimalName,
etc from [dbo].[Animals] 
order by AnimalName

Tenga en cuenta que la comparación de SQL Server no distingue entre mayúsculas y minúsculas (a menos que lo fuerce de esa manera), por lo que lion , Lion y LiON son todos iguales

1
SeanC 20 feb. 2018 a las 20:41

Utilice un caso de selección o, si hay muchos registros, insértelos en una tabla temporal y actualice según sea necesario.

CREATE PROCEDURE [dbo].[usp_GetAnimals] 
AS
SET NOCOUNT ON;

SELECT DISTINCT AnimalId,AnimalName,etc 
Into #tmpAnimal
from [dbo].[Animals] 

Update #tmpAnimal
Set AnimalName = 'LionABC'
Where AnimalName = 'Lion'

Select * from #tmpAnimal
order by AnimalName

Drop table #tmpAnimal
1
SqlKindaGuy 20 feb. 2018 a las 20:50