Mise à jour SQL où dans l'ensemble de données
+------------------+
| id1 | id2 | bool |
+------------------+
| 1 | 1 | F |
| 1 | 2 | F |
| 2 | 1 | F |
+------------------+
UPDATE table_name
SET bool = T
WHERE (id1, id2) IN ((1,1),(2,1)) --Need work here
Donc, fondamentalement, je veux sélectionner l'emplacement où les conditions de (id1, id2) = (valeur1, valeur2).
Similaire à l'instruction ci-dessous:
WHERE id1 = value1 AND id2 = value2
cependant dans un ensemble de valeurs dans un tableau.
Est-ce possible?
Merci d'avance
EDIT: je suis à l'aide de SQL server 2008. Je suis désolé si ce n'était pas trop clair.
Je suis en train de mettre cela en tant que procédure stockée et l'appeler à partir d'un service. L'entrée serait une sorte d'un tableau (de taille variable), et de trouver une correspondance avec les deux Id en ligne.
source d'informationauteur Yuan Sunarto
Vous devez vous connecter pour publier un commentaire.
Ici est la façon de le faire dans MSSql. Tous vous avez besoin est de faire une seule valeur (dans cet exemple de type VARCHAR) à partir de Id1 et Id2. Dans ce cas, vous pouvez utiliser DE l'état avec les valeurs définies. Aussi, vous devriez réfléchir sur les valeurs Null dans les id1 et id2, s'ils sont autorisés dans ces domaines (juste ajouter:
and id1 is not null and id2 is not null
).Une idée d'y parvenir est de faire usage de la table temporaire
Essayer Ce - Version de SQL Server 2008.
Cette requête fonctionne dans oracle...
Qui est votre base de données?
Ce que vous êtes fondamentalement essaie de faire? Pourquoi est-ce la façon dont vous avez choisi de le faire? Il semble que vous êtes un peu floue dans la compréhension de base de jeu de logique. Chacune des réponses fournies par d'autres affiches sont valides et de travail, mais peut-être pas le plus adapté pour votre but. Est-ce le traitement contre un jeu de données? Fait-il partie d'un chargement de données ou d'insertion? Chacun des champs de l'IDENTIFIANT que vous avez énumérés, a sa propre gamme de valeurs uniques. Basé sur votre exemple, il semble que ce que vous êtes vraiment vouloir faire est de mettre à jour la valeur booléenne quand ID2 = 1
Plus probable que vous êtes désireux de développer une logique qui définit la valeur Booléenne basés sur les données de la règle, si par exemple, Id2 est inférieur ou égal à Id1. Un cas de déclaration de travaux ici:
C'est beaucoup plus efficace lorsque vous traitez avec de grands ensembles de données que l'écriture ET/OU des règles dans votre clause where pour chaque variation de valeurs à insérer.
Penser à OÙ comme un filtre plutôt que comme un endroit pour mettre en œuvre si/alors logique de type.
Dans les petites insérer des données (vous soit manuellement, tapez des valeurs dans les champs de la table, sont l'insertion d'une sorte de formulaire web transaction par transaction), il est probablement plus simple juste pour définir manuellement la valeur que vous voyez l'ajustement, ou de construire que dans la partie procédure de votre système et d'appliquer une règle de validation à la table.
Si vous voulez écrire une procédure stockée qui est-ce à vous de créer des variables pour les valeurs d'ID et de les relier jusqu'à ce que le système transmet les informations externes dans votre système de base de données. (Je présume que vous avez créé la table des structures déjà);
Ce processus peut être appelé par votre programme et vous passer les variables vous pouvez générer à partir d'un tableau. Il y a aussi des façons où vous pouvez importer directement les valeurs de la colonne appropriée, puis d'exécuter le Bool logique dans l'après-insérer le code. "Codage en dur" une OÙ la déclaration de traiter chaque cas est inefficace, et une mauvaise habitude à prendre.
si vous utilisez SQL Server essayer cette
essayer si vous utilisez oracle
habituellement, nous utilisons dans la clause si nous avons plus qu'une valeur de match.
en supposant que vous (id1 = valeur1 et id2 =valeur2) et (id1 = valeur3 et id2 =value4)
Vous pouvez envoyer votre liste de valeurs à la procédure stockée au format XML. Décompresser le fichier XML de la table variable et utiliser
exists
pour trouver les lignes que vous devez mettre à jour.Appeler comme ceci: