Je souhaite effectuer une procédure stockée avec un minimum de 2 paramètres requis, mais elle peut également être appelée avec des paramètres 2,3,4,5 ... et ainsi de suite. La raison: J'ai plusieurs tables qui ont des paires clé-valeur, mais cette valeur-clé peut être un groupe à une autre liste de paires valeur-clé. Alors que le premier est la clé parent à la liste suivante. Ceci est un exemple de 2 tables qui peuvent être appelées à la même procédure, détaillée par la suite:Procédure stockée SQL avec paramètres optionnels infinis
--MyListTableAlpha
+- Key1 (ValueA)
+- Key2 (ValueB)
+- Key3 (ValueC)
+- Key4 (ValueD)
--MyListTableBravo
+- Parent Uno
+- Key1 (Value1A)
+- Key2 (Value1B)
+- Parent Dos
+- Key1 (Value2A)
+- Key2 (Value2B)
+- Key3 (Value3C)
Le code doit être pour SQL Server 2008.
C'est ce que je le 2 paremeter procédure stockée:
CREATE PROCEDURE [dbo].[SPListValue]
-- Add the parameters for the stored procedure here
@listName nvarchar(100) = null,
@keyVal nvarchar(100) = null
-- optional parameters go here?!?
AS
BEGIN
SET NOCOUNT ON;
SELECT [value_string] from [tablenames]
JOIN [keyvalues] on [tablenames].[id] = [keyvalues].[tableid]
WHERE [dbo].[keyvalues].[key] = @keyVal
END
Tableau [keyvalues]
comporte les colonnes: id
, tableid
, parentkeyid
, key
, value
. Où parentkeyid
est utilisé lorsque les valeurs sont groupées pour savoir à laquelle elles appartiennent.
Voilà comment je voudrais appeler MyListTableAlpha
de mon code Java (avis 2 s?):
CallableStatement cs1 = conn1.prepareCall("{call SPListValue(?,?}"); //notice 2 ?s
cs1.setString(1, "MyListTableAlpha");
cs1.setString(2, "Key1");
ResultSet rs1 = cs1.executeQuery();
rs1.next();
value = rs1.getString("value_string"); // Prints ValueA
Voilà comment je voudrais appeler MyListTableBravo
de mon code Java (avis 3 s?) :
CallableStatement cs1 = conn1.prepareCall("{call SPListValue(?,?,?}"); //notice 3 ?s
cs1.setString(1, "MyListTableBravo");
cs1.setString(2, "Parent Uno");
cs1.setString(3, "Key2");
ResultSet rs1 = cs1.executeQuery();
rs1.next();
value = rs1.getString("value_string"); // Prints Value1B
On dirait que vous avez une conception de DB mal cassé. – Oded
La conception DB fonctionne de sorte que je puisse avoir les valeurs-clés groupées si désiré. Il a été réduit à néant pour avoir présenté cette question. Ma question est sur la façon d'ajouter des paramètres infinis à la procédure stockée SQL. – elcool
Vous aurez plus de chances de réussir si vous choisissez une limite supérieure légèrement inférieure à l'infini. – AShelly