2017-01-22 1 views
0

Je dois créer une procédure stockée dans Microsoft SQL Server Management Studio pour augmenter les prix dans une table de certains pourcentages à l'aide de paramètres d'entrée. La procédure doit avoir un paramètre d'entrée utilisateur pour CategoryID (@CategoryID), et quand ils entrent CategoryID 1, le UnitPrice dans la table Products devrait augmenter de 10% (UnitPrice * 1.1). Si elles entrent CategoryID 2 il augmente de 15% et 7% pour CategoryID4 etc. Et pour toutes les autres catégories le prix UnitPrice devrait rester le même. J'utilise la populaire base de données exemple Northwind.Comment créer des paramètres d'entrée utilisateur pour augmenter les prix des produits dans une table Produits

USE [Northwind]; 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE usp_IncreasePrices_test2 
(
@CategoryID int 
) 
RETURNS int 
AS 
BEGIN 
DECLARE @CategoryID int 
SELECT @CategoryID = (dbo.OrderDetails[UnitPrice]*1.1) 

C'est ce que j'ai jusqu'à présent je sais qu'il est probablement faux que toute aide serait très appréciée

+0

Indice: 'UPDATE'. –

Répondre

0

logique très étrange, de toute façon vous faire quelque chose comme ça ...

CREATE PROCEDURE usp_IncreasePrices_test2 
    @CategoryID INT = NULL 
AS 
BEGIN 
    SET NOCOUNT ON; 
    Declare @PriceUp DECIMAL(5,2); 

SET @PriceUp = CASE 
        WHEN @CategoryID = 1 THEN 1.10 
        WHEN @CategoryID = 2 THEN 1.15 
        WHEN @CategoryID = 4 THEN 1.07 
        ELSE 1.00 
        END 

    UPDATE dbo.Products 
    SET UnitPrice = CAST(UnitPrice * @PriceUp AS DECIMAL(5,2)) 
    WHERE Categoryid = @CategoryID 

END 
+0

Astuce 'BEGIN..END' ne fait pas ce que la plupart des gens pensent qu'il fait. Ils peuvent être supprimés sans effet. Les seules choses qui identifient la fin d'un proc stocké sont 'GO' ou la fin du script. –

+0

@CraigYoung Je comprends l'utilisation de 'BEGIN ... END' et ne l'utilise jamais comme un séparateur de lots, il est seulement utilisé pour séparer les blocs de code. Cela donne également l'air plus propre et plus facile à lire. –

+0

Je ne conteste pas votre compréhension de 'BEGIN..END' dans les procédures stockées (comme utilisé ici). Juste essayer de sensibiliser une surprise inattendue pour ceux qui ne savent pas. Si vous interprétez «plus facile à lire» comme «esthétiquement plaisant»: je suis d'accord, ça a l'air mieux. Cependant, si vous interprétez comme "_easier à comprendre ** correctement ** _": alors ce code est facilement mal interprété. Il semble que 'END' termine le proc. Donc quelqu'un pourrait ajouter un 'SELECT' après' END' pour vérifier les données de la table. Lancez _that_ script et soyez très désagréablement surpris que chaque fois que vous appelez le proc il est aussi 'SELECT's. –