查看下表:
ID Number01 Number02 Number03
-----------------------------------
1 10 20 4510
2 5 2 545
3 4 4 664
4 10 1 NULL
5 1 4 NULL
" Number03" field是计算字段,即Number01 + Number02。我正在使用存储过程来计算它。为什么我使用存储过程?因为我有asp.net制作的界面。
这是存储过程:
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
问题是,如何在不逐个输入值的情况下执行存储过程?因为该值已在表中。我想更新" Number03"的所有空值。领域。还有任何想法如何使用CURSOR执行我的问题?
编辑:我的上一个问题似乎太简单了。所以我让它变得复杂一点。答案 0 :(得分:2)
由于您使用的是SQL Server 2008,因此可以使用computed field从其他两个字段生成值。
如果您只是想在不执行此操作的情况下更新表,则可以使用以下SQL:
UPDATE _myTable SET Number03 = ISNULL(Number01,0) + ISNULL(Number02,0)
这将更新所有行。
您可以更新SP以获得第3个参数:
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
编辑:我已将ISNULL
添加到null
的任何数字的计算中,而是使用 0 。
答案 1 :(得分:1)
如果确实想要使用SP来完成工作,则必须一次执行一项操作。写一个游标来选择所有具有NULL值的行,并为传递Number01和Number02的每一行调用SP。
我怀疑你的实际例子比你所展示的代码复杂得多。如果您能够详细了解我们可能会提出更好的方法。如果确实这么简单,那么计算列或简单的更新语句就是最佳选择。
答案 2 :(得分:1)
您可以像这样使用计算列。它会自动填充 number03 列中的所有数据。
CREATE TABLE _myTable(
ID INT IDENTITY(1,1),
Number01 INT,
Number02 INT,
Number03 AS (Number01 + Number02)
)
------或者,如果你已经有表,那么
Alter table _myTable Drop column Number03;
Alter table _myTable Add Number03 AS (Number01 + Number02);
------------- 根据您在问题中的编辑进行编辑
您仍然可以将此公式放在计算列中。 但是,当你问另一种方式时,你可以像这样编辑你的
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
答案 3 :(得分:0)
以下是如何做到这一点:
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
的示例