使用表中的值执行存储过程SQL
查看下表:使用表中的值执行存储过程SQL,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,查看下表: 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”字段是一个计算字段,它是Number01+
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”字段是一个计算字段,它是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”字段上的所有空值。还知道如何使用游标执行我的问题吗
编辑:我前面的问题似乎太简单了。所以我把它弄得有点复杂。因为您使用的是SQL Server 2008,所以可以使用a从其他两个字段生成值 如果只想更新表而不执行此操作,可以使用以下SQL:
UPDATE _myTable SET Number03 = ISNULL(Number01,0) + ISNULL(Number02,0)
这将更新所有行
您可以更新SP以获取第三个参数:
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。因为您使用的是SQL Server 2008,所以可以使用a从其他两个字段生成值
如果只想更新表而不执行此操作,可以使用以下SQL:
UPDATE _myTable SET Number03 = ISNULL(Number01,0) + ISNULL(Number02,0)
这将更新所有行
您可以更新SP以获取第三个参数:
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。以下是您可以执行的操作:
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
下面的示例是如何做到这一点:
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
示例在如果您真的想使用SP来完成工作,您必须一次完成一个。写一个光标来选择所有具有空值的行,并为通过Number01和Number02的每一行调用SP
我怀疑您的实际示例比您显示的代码要复杂得多。如果您能更详细地了解,我们可能会建议更好的方法。如果它确实如此简单,那么可以使用计算列或简单的update语句。如果您真的想使用SP来完成这项工作,则必须一次完成一项。写一个光标来选择所有具有空值的行,并为通过Number01和Number02的每一行调用SP
我怀疑您的实际示例比您显示的代码要复杂得多。如果您能更详细地了解,我们可能会建议更好的方法。如果它确实如此简单,那么可以使用计算列或简单的update语句。您可以这样使用计算列。它将自动填充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);
-------------根据您在问题中的编辑进行编辑
您仍然可以将此公式放在计算列中。
但是,正如您所问的那样,您可以这样编辑SP
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
您可以像这样使用计算列。它将自动填充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);
-------------根据您在问题中的编辑进行编辑
您仍然可以将此公式放在计算列中。
但是,正如您所问的那样,您可以这样编辑SP
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
只需使用update语句从存储过程中的_myTable?Mabey中选择:
update _myspset Number03=Number01+number02
检查上面的问题。。thx.只需从存储过程中的_myTable?Mabey中选择一个update语句:update _myspset Number03=Number01+number02
检查我上面的问题。。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@Mark-OP明确指出“问题是,我如何在不逐个输入值的情况下执行storeprocedure”,我回答“您不能”“这怎么不是问题的答案呢?我认为这是为了帮助人们理解并成为更好的程序员,”马克说。我的错。这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。@Mark-OP明确指出“问题是,我如何在不逐个输入值的情况下执行storeprocedure”,我回答“您不能”“这怎么不是问题的答案呢?我认为这是为了帮助人们理解并成为更好的程序员,”马克说。我的错。更新可以更改为…其中Number03为NULL
,您不需要光标吗?更新可以更改为…其中Number03为NULL
,您不需要光标吗?