Exécute la procédure stockée SQL en utilisant la valeur de la table

Vérifiez ma table ci-dessous:

ID Number01 Number02 Number03 ----------------------------------- 1 10 20 4510 2 5 2 545 3 4 4 664 4 10 1 NULL 5 1 4 NULL 

Le champ "Number03" est un champ calculé qui est Number01 + Number02. J'utilise une procédure stockée pour le calculer. Pourquoi j'utilise une procédure stockée? Parce que j'ai l'interface qui est faite par asp.net.

C'est la procédure stockée:

 ALTER PROCEDURE _mySP (@Number01 decimal(18,0), @Number02 decimal(18,0)) AS BEGIN DECLARE @myCOM1 float DECLARE @myCOM2 float SET @myCOM1 = @Number1 + 500 SET @myCOM2 = POWER(@Number2, 2) * 10 INSERT INTO _myTable(Number01, Number02, Number03) VALUES (@Number01, @Number02, @myCOM1 + @myCOM2) END 

La question est, comment puis-je exécuter la procédure stockée sans entrer la valeur un par un? Parce que la valeur est déjà dans la table. Je veux mettre à jour toute la valeur nulle sur le champ "Number03". Aussi aucune idée comment exécuter ma question en utilisant CURSOR?

EDIT: Il semble que ma question précédente est trop simple. Donc, je le rend un peu complexe.

Puisque vous utilisez SQL Server 2008, vous pouvez utiliser un champ calculé pour générer la valeur à partir des deux autres champs.

Si vous voulez simplement mettre à jour la table sans cela, vous pouvez utiliser le code SQL suivant:

 UPDATE _myTable SET Number03 = ISNULL(Number01,0) + ISNULL(Number02,0) 

Cela mettra à jour toutes les lignes.

Vous pouvez mettre à jour le SP pour prendre un 3ème paramètre:

 ALTER PROCEDURE _mySP ( @Number01 DECIMAL(18, 0) , @Number02 DECIMAL(18, 0) , @IsUpdate BIT = 0 ) AS BEGIN IF ( @IsUpdate = 0 ) BEGIN INSERT INTO _myTable ( Number01 , Number02 , Number03 ) VALUES ( @Number01 , @Number02 , ISNULL(@Number01,0) + ISNULL(@Number02,0) ) END ELSE BEGIN UPDATE _myTable SET Number03 = ISNULL(Number01,0) + ISNULL(Number02,0) WHERE Number03 IS NULL END END 

EDIT : J'ai ajouté ISNULL au calcul pour tous les nombres qui sont null , il utilisera 0 à la place.

Si vous voulez vraiment utiliser le SP pour faire le travail, vous devez le faire un à la fois. Ecrivez un slider pour sélectionner toutes les lignes avec une valeur NULL et appelez le SP pour chaque ligne passant Number01 et Number02.

Je soupçonne que votre exemple réel est plus compliqué que le code que vous avez montré. Si vous êtes en mesure d'entrer dans plus de détails, nous serons peut-être en mesure de suggérer de meilleures approches. Si c'est vraiment simple, une colonne calculée ou une simple instruction de mise à jour serait le path à parcourir.

Vous pouvez utiliser des colonnes calculées comme ceci. Il va automatiquement remplir toutes datatables dans la colonne number03 .

 CREATE TABLE _myTable( ID INT IDENTITY(1,1), Number01 INT, Number02 INT, Number03 AS (Number01 + Number02) ) 

—— OU si vous avez déjà une table alors

 Alter table _myTable Drop column Number03; Alter table _myTable Add Number03 AS (Number01 + Number02); 

————- RÉVISÉ SELON VOTRE ÉDITION EN QUESTIONS

Vous pouvez toujours mettre cette formule dans la colonne calculée. Mais comme vous requestz une autre façon, vous pouvez modifier votre SP comme ça

 ALTER PROCEDURE _mySP AS BEGIN Update _myTable set Number03 = ((Number01 + 500) + (POWER(Number02, 2) * 10)) WHERE Number03 is NULL; END --------Executing Stored procedure will update table without providing any parameters Exec _mySP 

Voici comment vous pourriez le faire:

 CREATE TABLE #Test( ID int, Number1 decimal(18,0), number2 decimal(18,0), number3 decimal(18,0)) INSERT INTO #Test VALUES (1 , 10, 20, 30), (2 , 5 , 2, 7), (3 , 4, 4 , 8), (4 , 10, 1, NULL), (5 , 1, 4, NULL) UPDATE #Test Set Number3 = Number1 + number2 SELECT * FROM #Test DROP TABLE #Test 

Exemple à SQLFiddle