我有这个存储过程:
CREATE PROCEDURE [Test]
(@ID INT,
@month VARCHAR(10),
@Low INT,
@standard FLOAT = 0)
AS
IF EXISTS (SELECT 1 FROM [Table1]
WHERE ID = @ID AND month = @month
AND TYPE = 'S' AND TYPEID = @Low)
BEGIN
UPDATE [Table1]
SET Add = @standard
WHERE ID = @ID AND month = @month
AND TYPE = 'S' AND TYPEID = @Low
END
ELSE
BEGIN
INSERT INTO [Table1] (ID, month, Add, TYPE, TYPEID)
VALUES (@ID, @month, @standard, 'S', @Low)
END
GO
这是缺少三月日期的表
ID Month Add Type TypeID
---------------------------------------
333 feb 4 S 111
333 April 4 S 111
所以我想通过刷新存储过程,这将填补3月份。
但是当我使用
执行程序时Use [DB1]
GO
DECLARE @RV int
DECLARE @ID int
DECLARE @month varchar(10)
DECLARE @Low int
DECLARE @Add int
DECLARE @standard float
EXECUTE @RV = [Test]
@ID int,
@month varchar(10),
@Low int,
@Add int,
@standard float
GO
我得到了
ID Month Add Type TypeID
-----------------------------------------------
333 feb 4 S 111
333 April 4 S 111
NULL NULL NULL S NULL
虽然我在寻找
ID Month Add Type TypeID
------------------------------------------------
333 feb 4 S 111
333 April 4 S 111
333 Mar 4 S 111
我假设我没有正确传递参数或其他东西。任何人都可以就此提出建议吗?感谢
答案 0 :(得分:3)
您声明要将参数传递到存储过程,但是您没有在任何地方为它们分配值,因此该过程无法使用。
您需要将执行语句更改为以下内容:
Use [DB1]
GO
DECLARE @RV int = 0;
DECLARE @ID int = 333;
DECLARE @month varchar(10) = 'Mar';
DECLARE @Low int = 111;
DECLARE @Add int = 4;
DECLARE @standard float = 4;
EXECUTE @RV = [Test]
@ID = @ID,
@month = @month,
@Low = @Low,
@Add = @Add,
@standard = @standard;
GO
将0和1.0替换为想要使用的值。
此外, month
是表格中的字符串列,但您将INT
传递给该过程。您需要更改@month
参数以匹配表列的数据类型。
(在编辑后删除)