15

Ho un sito web on-line, in un modello di carrello eccMemorizzazione dei risultati delle query in una variabile e la modifica all'interno di un dove roba ordine del cliente stored procedure

I problemi è quando ho saputo ordine registrato ci sono diverse informazioni che deve essere aggiornato come entrata nella tabella degli ordini, detrazioni dalla tabella delle scorte, aggiornamento della tabella delle vendite ecc. e attualmente sto facendo questa operazione eseguendo ogni singola query una volta nel database ottenendo il suo risultato modificando come da requisito e poi eseguendo un'altra query per aggiornare il risultato, come query successiva richiede informazioni dal precedente:

 bool stts = false; 
     int re1 = 0, re2 = 0, re3 = 0; 
     short maxOr = 0, maxCa = 0, maxOc = 0; 
     SqlConnection conn= Shared.GetSqlCon(); //Make connection object 

     conn= Shared.GetSqlCon(); 
     var comm1 = new Commmand("SELECT MAX(orId) FROM [order];", sqlCon); 
     maxOr = Shared.OSC(sqlCon, comm1); 
     Shared.COC(sqlCon); //Close & Dispose connections 

     conn= Shared.GetSqlCon(); 
     var comm2 = new Commmand("SELECT MAX(caId) FROM [cart];", sqlCon); 
     maxCa = Shared.OSC(sqlCon, comm2); 
     Shared.COC(sqlCon); 

     conn= Shared.GetSqlCon(); 
     var comm3 = new Commmand("INSERT INTO [order_cart](orId,caId) VALUES(@maxOr,@maxCa);", sqlCon); 
     comm3.Parameters.AddWithValue("@maxOr", maxOr + 1); 
     comm3.Parameters.AddWithValue("@maxCa", maxCa + 1); 

E ovviamente questo in alcun modo non è un ottimo modo per farlo andare avanti e indietro nel database ancora e ancora e penso che passare attraverso SQL Server Stored Procedures sarebbe un'idea migliore. Ma anche dopo aver provato e trovare un sacco non riuscivo a trovare un esempio di come in grado di memorizzare il risultato di una query in una variabile SP e utilizzarlo al suo interno, un po 'come questo:

Declare @myVar int //Stored Procedure variable 
@myVar = SELECT MAX(caId) FROM [cart] //Getting query result in the variable 
INSERT INTO [order_cart](orId,caId) VALUES(@maxOr, @myVar); //Updating record through the variable 
return @myVar //return variable value to the program 

Questo è possibile fare Questo? Se sì di come si prega di guida.

+0

Sarà utile per l'inizio dei risultati? http://stackoverflow.com/questions/7542517/call-a-stored-procedure-with-parameter-in-c-sharp – Serg

risposta

5

Prova questo esempio

CREATE PROCEDURE MyProc 
BEGIN 
    --Stored Procedure variables 
    Declare @maxOr int; 
    Declare @maxCa int; 

    --Getting query result in the variable (first variant of syntax) 
    SET @maxOr = (SELECT MAX(orId) FROM [order]); 

    --Another variant of seting variable from query 
    SELECT @maxCa=MAX(caId) FROM [cart]; 

    --Updating record through the variable 
    INSERT INTO [order_cart] (orId,caId) 
    VALUES(@maxOr, @maxCa); 

    --return values to the program as dataset 
    SELECT 
     @maxOr AS maxOr, 
     @maxCa AS maxCa 

    -- return one int value as "return value" 
    RETURN @maxOr 
END 
GO 

SQL-comando per chiamare la stored procedure

EXEC MyProc 
0

Oppure si può utilizzare uno SQL-comando invece di creare e richiamare stored procedure

INSERT INTO [order_cart](orId,caId) 
OUTPUT inserted.* 
SELECT 
    (SELECT MAX(orId) FROM [order]) as orId, 
    (SELECT MAX(caId) FROM [cart]) as caId; 
22

Sì, questo è ovviamente possibile. Ecco alcuni esempi.

-- one way to do this 
DECLARE @Cnt int 

SELECT @Cnt = COUNT(SomeColumn) 
FROM TableName 
GROUP BY SomeColumn 

-- another way to do the same thing 
DECLARE @StreetName nvarchar(100) 
SET @StreetName = (SELECT Street_Name from Streets where Street_ID = 123) 

-- Assign values to several variables at once 
DECLARE @val1 nvarchar(20) 
DECLARE @val2 int 
DECLARE @val3 datetime 
DECLARE @val4 uniqueidentifier 
DECLARE @val5 double 

SELECT @val1 = TextColumn, 
@val2 = IntColumn, 
@val3 = DateColumn, 
@val4 = GuidColumn, 
@val5 = DoubleColumn 
FROM SomeTable