Ma procédure fonctionnait correctement dans une base de données de 2005, mais mon PC est mort et lorsque j'ai recommencé, j'ai installé 2008 plutôt que 2005 - maintenant cette procédure ne renvoie aucun résultat. Je pose la question sur la différence entre les 2 versions simplement parce que j'ai utilisé cette logique auparavant et je n'ai pas changé la procédure depuis que je l'ai créé et ça fonctionnait, le seul changement a été le fait que j'utilise maintenant SQL 2008Pourquoi SQL2008 n'interprète-t-il pas la clause WHERE conditionnelle dans ma procédure stockée de la même manière qu'en 2005?
J'ai écrit la procédure dans Visual Studio et j'ai remarqué que lorsque je colle l'instruction select dans le volet SQL pour la table, elle est restructurée et développée afin que chaque variation puisse être exprimée en combinant les ANDs et ORs.
Ce dont j'ai besoin, c'est de pouvoir appeler cette procédure en passant l'un ou l'autre paramètre; donc si je ne passe que le componentType, il devrait évaluer la partie déclaration finale de l'instruction et utiliser la valeur transmise - si aucune valeur n'a été transmise, elle correspondrait au côté IS NULL de la condition.
ALTER PROCEDURE dbo.uspSel_ComponentByType(
@filterText VARCHAR(50) = NULL
, @componentType CHAR(2) = NULL)
AS
SELECT [pkComponentID], [ComponentType], [ComponentName], [fkSupplierID], [Cost], [WastageCost]
FROM [tblComponents] AS c INNER JOIN
[tblSuppliers] AS s ON [c].[fkSupplierID] = [s].[pkSupplierID]
WHERE ([ComponentName] LIKE @filterText + '%' OR [SupplierName] LIKE @filterText + '%')
AND [c].[IsDeleted] = 0
AND (@componentType IS NULL OR [ComponentType] = @componentType)
est le code affiché la procédure que vous l'avez écrit, ou le proc restructuré par Visual Studio? –
Le code est tel que je l'ai écrit, Visual Studio (et SSMS) le restructurer et le présenter différemment. –