Le passage d'un tableau de paramètres à une procédure stockée
J'ai besoin de passer un tableau de "id" à une procédure stockée, pour supprimer toutes les lignes de la table, SAUF les lignes qui correspondent à l'id dans le tableau.
Comment puis-je le faire de la manière la plus simple de la sorte?
- N'est-ce pas un double de la stackoverflow.com/questions/114504/...?
- Saunders, il y a beaucoup de "passer le tableau en paramètre" sql server questions. Cependant, ce qui a ajouté de tordre, de le supprimer toutes les lignes à l'exception de le passé dans les paramètres de la partie de la question. En conséquence, je ne pense pas que c'est un doublon.
- John Saunders, je ne sais pas j'ai fait une recherche mais n'ai pas trouvé ce que je cherchais. Est-il un problème avec ça?
- si vous faites un volume élevé d'appels de procédure et la nécessité de construire une chaîne de caractères xml à chaque fois, vous n'êtes pas efficace et le pur sql méthode serait mieux. si vous avez déjà de la chaîne xml, ou sont en train de faire un faible volume d'appels de procédure, le xml sera très bien.
Vous devez vous connecter pour publier un commentaire.
Utiliser une procédure stockée:
EDIT:
Un complément pour sérialiser Liste (ou autre chose):
Le résultat (prêt à l'emploi avec le paramètre XML):
ORIGINAL POST:
XML en passant en paramètre:
SELECT * FROM OPENXML (@handle, '/ArrayOfString/string') WITH (myString varchar(100) '.')
oùmyString
sera le nom de la colonne et la valeur est tronquée par le nombre de caractères de la liste dans lavarchar
déclaration.Si vous utilisez Sql Server 2008 ou mieux, vous pouvez utiliser quelque chose appelé un Paramètre Table ("TVP") au lieu de la sérialisation et la désérialisation de votre liste de données chaque fois que vous souhaitez passer à une procédure stockée.
Commençons par créer un schéma simple pour servir notre terrain de jeu:
Avec notre schéma et les données de l'échantillon en place, nous sommes maintenant prêts à créer notre TVP procédure stockée:
Avec notre schéma et de l'API en place, nous pouvons appeler la TVP de la procédure stockée à partir de notre programme comme suit:
Il est probable que la moins douloureuse pour ce faire à l'aide d'une manière plus abstraite de l'API, comme l'Entity Framework. Cependant, je n'ai pas le temps de voir par moi-même en ce moment.
c'est la meilleure source:
http://www.sommarskog.se/arrays-in-sql.html
créer une scission de la fonction en utilisant le lien, et de l'utiliser comme:
Je préfère le numéro de table approche
Ce code est basé sur le lien ci-dessus qui devraient le faire pour vous...
Avant d'utiliser ma fonction, vous devez configurer un "helper" de la table, vous avez seulement besoin de le faire une fois par base de données:
utiliser cette fonction pour diviser votre chaîne, qui n'a pas de boucle et est très rapide:
vous pouvez utiliser cette fonction comme un tableau dans une jointure:
ici est votre supprimer:
Vous pouvez essayer ceci:
Vous pouvez utiliser une table temporaire qui de la procédure stockée s'attend à exister. Cela permettra de travailler sur des versions antérieures de SQL Server, qui ne prennent pas en charge XML, etc.
J'avais envisager de passer votre Id comme une chaîne de caractères XML, et puis vous pouvez broyer les données XML dans une table temporaire pour se joindre à l'encontre de, ou vous pouvez également interroger directement le XML à l'aide de SP_XML_PREPAREDOCUMENT et OPENXML.
Qu'en utilisant le type de données XML au lieu de passer d'un tableau. Je trouve que la meilleure solution et fonctionne bien dans SQL 2005
Je l'aime, parce qu'il est adapté pour être passé comme un XElement, ce qui est approprié pour SqlCommand
(Désolé c'est VB.NET mais vous voyez l'idée)
C'est le sql, procédures Stockées, raccourci, pas complète!
CREATE PROCEDURE [dbo].[myproc]
(@blah xml)
COMME
... OÙ SomeID DANS (SÉLECTIONNEZ doc.t.valeur('.','int") à partir de @netwerkids.les nœuds(N'/doc/d') doc(t))
Dans SQL Server 2016, vous pouvez insérer un tableau avec les [ ] et passer comme JSON voir http://blogs.msdn.com/b/sqlserverstorageengine/archive/2015/09/08/passing-arrays-to-t-sql-procedures-as-json.aspx
Vous pouvez utiliser le STRING_SPLIT fonction dans SQL Server.
Vous pouvez consulter la documentation ici.