存储过程中使用CASE生成新值后,如何移除原有v_sCadenaConexion结果?
解决存储过程中
v_sCadenaConexion值重复问题:用CASE逻辑完全替换旧值 看来你是要给存储过程里的v_sCadenaConexion做值的替换逻辑——核心就是当str_NombreVariable存在时,用CASE生成的新值彻底覆盖原来的旧值,避免出现重复内容对吧?我给你具体说怎么做:
核心思路
不要先给v_sCadenaConexion赋旧值再追加新值,而是直接用CASE语句生成最终的唯一值:当str_NombreVariable存在时返回CASE生成的新值,不存在时按需保留旧值(或者设默认值),这样就从根源上杜绝了重复。
代码示例(分两种场景)
场景1:直接从查询结果赋值
如果你的v_sCadenaConexion是从表查询中获取的,把原来的查询逻辑改成用CASE包裹:
SELECT v_sCadenaConexion = CASE -- 先判断str_NombreVariable是否存在(根据你的实际需求调整判断条件,比如非空非空字符串) WHEN str_NombreVariable IS NOT NULL AND str_NombreVariable <> '' THEN -- 这里写你的CASE生成新值的具体逻辑 CASE str_NombreVariable WHEN 'DB_PROD' THEN 'Server=PROD_SQL;Database=ProdDB;Integrated Security=True' WHEN 'DB_TEST' THEN 'Server=TEST_SQL;Database=TestDB;User ID=test_user;Password=123456' ELSE 'Default_Connection_String' -- 处理其他匹配不到的情况 END ELSE original_connection_value -- 如果str_NombreVariable不存在,保留原来的旧值;不需要的话可以换成NULL或默认值 END FROM your_target_table WHERE -- 你的查询条件
场景2:存储过程中变量赋值
如果是先声明变量再赋值,直接用CASE给变量一次性赋值:
DECLARE @v_sCadenaConexion VARCHAR(500) DECLARE @str_NombreVariable VARCHAR(100) -- 假设这个变量是从参数或其他逻辑获取的 -- 直接用CASE生成最终值,覆盖所有情况 SET @v_sCadenaConexion = CASE WHEN @str_NombreVariable IS NOT NULL AND @str_NombreVariable <> '' THEN CASE @str_NombreVariable WHEN 'DB_PROD' THEN 'Server=PROD_SQL;Database=ProdDB;Integrated Security=True' WHEN 'DB_TEST' THEN 'Server=TEST_SQL;Database=TestDB;User ID=test_user;Password=123456' ELSE 'Default_Connection_String' END ELSE 'Original_Connection_Value' -- 不存在时用旧值或默认值 END
关键提醒
之前出现重复的原因大概率是你先给v_sCadenaConexion赋了旧值,然后又把CASE生成的新值拼了进去(比如用+连接)。现在换成直接用CASE生成唯一值,变量只会持有一个结果,自然就不会重复了。
内容的提问来源于stack exchange,提问作者user9065477
相关产品推荐
相关产品推荐

