Procédure Stockée SQL Server Plusieurs Insérer dans une table unique de la Matrice
Je suis l'aide d'une procédure stockée pour insérer des enregistrements dans une table. Et le faire au moins 12 fois dans une boucle pour insérer plusieurs enregistrements qui est très inefficace.
voici la procédure CRÉÉ
Create PROC [dbo].[SP_INSERT_G_SAMPLING]
@GameID INT,
@ScoreID INT
as
begin
INSERT INTO GAMESCORE (GAMEID, SCOREID) VALUES
(@GameID, @ScoreID)
end
Je passe sur les valeurs ex(1,3) et boucle avec plus de valeurs à partir du site web.
Je veux toutefois passer sur toutes les valeurs à la fois comme (1,3),(4,5),(8,9)
et ensuite modifier la procédure ci-dessus pour recevoir et d'insérer plusieurs lignes.
ALTER PROC [dbo].[SP_INSERT_G_SAMPLING]
@totalinsert nvarchar(Max)
INSERT INTO GAMESCORE (GAMEID, SCOREID) VALUES
(@totalinsert)
avec @totalinsert être comme (1,3),(4,5),(8,9) poussé à partir de la page web.
toute aide est grandement appréciée
- La version de SQL server que vous utilisez? Le tableau de la Valeur des Paramètres (TVP) est la meilleure façon de le faire.
- Avez-vous envisager l'utilisation de type de données XML dans SQL Server?
- Remarque: vous devez vous pas utilisez le
sp_
préfixe pour les procédures stockées. Microsoft a réservés préfixe pour son propre usage (voir le Nommage des Procédures Stockées), et de vous faire courir le risque d'un conflit de nom dans le futur. C'est aussi mauvais pour votre procédure stockée performance. Il est préférable de tout simplement évitersp_
et d'utiliser quelque chose comme un préfixe ou pas de préfixe à tous! - SQL Server 2005 sur le serveur. localement, j'ai 12. Je veux aller avec quelque chose qui va travailler pour 05 et.
Vous devez vous connecter pour publier un commentaire.
Ce que vous allez avoir à faire est d'écrire une fonction à valeur de table qui accepte le multi-chaîne de valeur et les pauses dans un tableau d'objet. Si vous pouvez changer de source pour utiliser un séparateur d'enregistrement au lieu d'avoir virgule fixe, il serait un peu plus facile à traiter. Un exemple de ce que devrait ressembler à ceci.
Ci-dessous est un pur pseudo et n'a pas été validé en aucune façon, juste pour vous donner une idée approximative de l'endroit où aller.
ex: @TotalInsert = 1,2|4,5|8,9
Je suis en supposant que vous êtes en utilisant .NET pour votre site web puisque vous êtes également à l'aide de SQL Server.
Ont un coup d'oeil à table des paramètres, cette page comporte également un bel exemple d'utilisation de la table de paramètres dans .NET.
Vérifier ici pour un meilleur exemple de faire une procédure stockée avec une table d'une valeur de paramètre en T-SQL.
Ici, c'est la pleine discussion:
http://www.sommarskog.se/arrays-in-sql-2005.html#XMLlist%20of%20values
Personnellement, j'ai envoyé xml à la procédure stockée, j' "déchiqueter" dans @variable ou #les tables temporaires, alors je fais de mon INSERT/UPDATE/FUSIONNER/SUPPRIMER à partir de là.
Voici une discussion plus complète sur xml-broyage.
http://pratchev.blogspot.com/2007/06/shredding-xml-in-sql-server-2005.html
Mon astuce est de créer un jeu de données, remplir la forte dataset avec des lignes, et l'utilisation de la ds.GetXml() pour envoyer le xml vers le bas pour le TSQL. Avec une forte dataset, je reçois fort-saisie lors du remplissage de la valeurs. Mais à la fin de la journée, le dataset est juste une super-chic xml.