Passer des ensembles et des paramètres facultatifs à une procédure stockée T-SQL - ASP.NET
Une tâche énorme pour moi. J'ai quelques questions. Déjà vous les gars m'ont beaucoup aidé, mais j'ai une difficulté après l'autre et de progresser incroyablement lentement. Ces questions permettront de mieux décrire mes tâches.
J'ai un page aspx avec les contrôles suivants: zone de texte, CheckBoxList DropDownList.
Ils sont utilisés pour spécifier des critères de recherche. Les enregistrements sont prises à partir de SQL Server Base de Données à l'aide d'une procédure stockée.
0), Il est clair comment passer d'un texte à partir de zone de texte à la recherche d'un produit par son nom. Pas de questions ici.
1) Chaque Case dans CheckBoxList a une valeur réelle de l'ID d'un Groupe de Produits dans la base de données. Si plus d'une case à cocher est sélectionnée, comment passer de la liste des Identifiants à une procédure stockée comme un ensemble, de sorte que je pouvais utiliser DANS @IdList? Quels types de variables dois-je utiliser en C# et T-SQL? Est-il possible?
2) DropDownList's premier élément est "TOUS". Lorsque "ALL" est sélectionné, j'ai besoin de passer à quelque chose comme NULL à la procédure stockée. Comment faire de la procédure stockée à ignorer un paramètre s'il est NULL?
Je suis épuisé, aucune idées viennent plus, j'ai même essayé de faire la recherche par chaque critère séparément, puis de les mettre a trouvé IDs dans des tableaux individuels, de les comparer et de composer un tableau avec le commun des Id, mais il y avait de nombreux problèmes, j'ai dû utiliser le géant des tableaux statiques, inefficace l'utilisation de la mémoire, incapable de créer des tableaux dynamiques, impossible de vérifier l'intersection de seulement non nulle éléments et ainsi de suite, j'ai donc abandonné cette idée...
CREATE PROCEDURE FilterList
@ProductName nvarchar(200),
@ProductGroupID int
AS BEGIN
SELECT
prod_id AS 'ID',
prod_name AS 'Name'
FROM
dbo.Products
WHERE
prod_group_id = @ProductGroupID OR
prod_name = @ProductName
END
source d'informationauteur SWA
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir les paramètres facultatifs en T-SQL, procédures stockées en ayant des valeurs par défaut égale à NULL.
Exemple où la valeur NULL est utilisé comme "ignorer ce paramètre":
Il est parfaitement bien de définir une procédure stockée pour prendre un paramètre table en T-SQL.
Voici un article sur le sujet http://sqlwithmanoj.wordpress.com/2012/09/10/passing-multipledynamic-values-to-stored-procedures-functions-part4-by-using-tvp/
Si vous avez besoin de plus d'infos sur cette google pour "paramètre table"
Exemple à l'aide de plusieurs valeurs des paramètres:
Votre réponse est correcte David, mais il est un peu trompeur car le paramètre égal à la valeur NULL n'est pas facultatif; il vient d'être défini sur une valeur de la période. Cela crée aussi des paramètres optionnels:
Qui pourrait donc être exécutée sans la réussite de tous les paramètres, à savoir:
Je comprends que ce n'était pas nécessairement ce que Piscovetz était en train de faire, mais il semble correspondre de plus près le sujet question montre, et c'est une distinction importante.