2010-06-14 5 views
1

je sais que je missasked la question, et c'est probablement la raison pour laquelle je ne trouve pas moi-même solution:résultats SQL question d'opération

Comment puis-je prendre un résultat dans une procédure stockée et et de modifier les données telles que

if column1 = AAA then 
     column1=Hello 
    else if column1 = BBB then 
    column1 = goodbye 

et que les données retournent avec les nouvelles valeurs?

Merci

Répondre

0

Si vous pouvez accéder au contenu de la procédure stockée, vous devez changer à la place à une fonction table - si possible, une fonction en ligne (parce que cela a beaucoup plus de chance d'être optimisé).

Cela vous permettra de interroger les résultats et le modifier au besoin:

SELECT CASE column1 
     WHEN 'AAA' THEN 'Hello' 
     WHEN 'BBB' THEN 'goodbye' 
     END as NewColumn, 
    ,* 
FROM dbo.yourNewFunction() as t; 

Si vous ne pouvez pas le faire, et sont très bien coincé avec une procédure stockée, vous pourriez l'envelopper dans OPENROWSET:

SELECT CASE column1 
     WHEN 'AAA' THEN 'Hello' 
     WHEN 'BBB' THEN 'goodbye' 
     END as NewColumn, 
    , * 
FROM OPENROWSET('SQLNCLI','Server=.;Trusted_Connection=Yes;','EXEC dbo.YourProc') as t; 

C'est un moyen de traiter la sortie d'une procédure comme une expression de la table, mais si vous pouvez le faire sans que la procédure, qui est encore mieux.

+0

Merci à tous ceux qui ont aidé! – wali

1

Utilisez l'instruction CASE:

SELECT CASE 
     WHEN column1 = 'AAA' THEN 'Hello' 
     WHEN column1 = 'BBB' THEN 'goodbye' 
     ELSE ... -- optional 
     END 
1

ces deux requêtes:

MISE À JOUR nom_table SET Column1 = 'Bonjour' OÙ colonne1 = 'AAA'
MISE À JOUR nom_table SET colonne1 = 'au revoir' WHERE column1 = 'BBB'

0

vous devrez renommer tout en commençant par mon à vos noms de table réelle

CREATE PROCEDURE myProc 
AS 
BEGIN 
    UPDATE myTable 
     SET Column1 = 
      CASE 
      WHEN 'AAA' THEN 'Hello' 
      WHEN 'BBB' THEN 'goodbye' 
      END 
    WHERE Column1 in ('AAA','BBB') 
    OUTPUT myTable.myIDColumn, INSERTED.Column1 
END 

mises à jour de la table et renvoie uniquement les enregistrements mis à jour une fois que vous

EXEC myProc 

Référence 1. http://technet.microsoft.com/en-us/library/ms177564.aspx