这是我的SQL代码
CREATE PROC sp_procedure
(@Name VARCHAR(50),
@Stock numeric)
AS
DECLARE @Code CHAR(4)
BEGIN
UPDATE tbProcedure
SET Name = @Name, Stock = @Stock
WHERE Code = @Code
SELECT * FROM tbProcedure
END
然后我执行这样的代码
EXEC sp_procedure 'Name',15,2
然后我得到了错误结果,说明了太多的参数。
我也试过这个
EXEC sp_procedure 'Name',15
它不会返回错误,但会影响0行。
我想在执行存储过程时分配@Code
值,是否可以这样做?
编辑:
抱歉,它实际上是CHAR(4)
,而不是INT
再次对不起,我只是复制粘贴所有代码而不先看它,上面是实际的代码,我很抱歉这个混淆......
答案 0 :(得分:1)
看起来您提供的参数顺序与您声明的顺序不同。选择在Name之前声明,但是在执行过程时首先提供Name。另外,您不希望您的更新语句说“code = @choice”吗?局部变量未定义且不需要。
答案 1 :(得分:0)
我得出的结论是,如果其中一个分支不使用所有参数,则无法组合分支存储过程。
因此我写了2个存储过程,下面是我的完整代码:
对于插入过程:[这是使用变量的过程]
strftime
用于更新,删除和显示程序:
CREATE PROC InsProcedure
(@Name VARCHAR(50),
@Stock numeric)
AS
DECLARE @CODE INT
DECLARE @CODE2 CHAR(4)
BEGIN
// Creating custom auto number
SET @CODE = 0
SELECT @CODE = ISNULL(MAX(CAST(KodeBarang AS INT)), 0)
FROM tbProcedure
SET @CODE2 = @CODE + 1
SET @CODE2 = REPLICATE('0', 4 - LEN(@CODE2)) + @CODE2
// End Custom auto number
INSERT INTO tbProcedure VALUES(@CODE2, @Name, @Stock)
SELECT * FROM tbProcedure
END
并使用以下程序:
CREATE PROC OtherProcedure
(@choice int, // this is for branching option later
@Code CHAR(4),
@Name VARCHAR(50),
@Stock numeric)
AS
IF @choice = 1
BEGIN
UPDATE tbProcedure
SET Name = @Name, Stock = @Stock
WHERE Code = @Code
SELECT * FROM tbProcedure
END
ELSE IF @choice = 2
DELETE FROM tbProcedure
WHERE KodeBarang = @Code
ELSE
SELECT * FROM tbProcedure
结果:
InsProcedure 'Laptop', 5
分支1 [更新]
00001, Laptop, 5
结果:
分支2 [删除]
OtherProcedure 1, 'Laptops', 10, 00001
分支3 [显示]
OtherProcedure 2, '', 0, 00001 // Delete record where Code is '00001'
答案 2 :(得分:0)
对于Microsoft SQL Server
对于您的问题: (请勿使用sp前缀)和(@code不是参数,因此我们无法传递值,它是局部变量) 如果您在使用IF时遇到问题,则将@code用作参数,但在需要时传递null值,然后执行该null检入过程。
请参见下文分配值:
USE [databasename]
GO
DECLARE @return_value int
EXEC @return_value = <procedurename>
@stringvariable = N'<stringvalue>',
@Flag = <integervalue>
SELECT 'Return Value' = @return_value (return value if any)
GO
答案 3 :(得分:-1)
首先,你的变量@Stock不会返回十进制,因为它是INT变量,你可以尝试浮点或其他东西。这就是为什么如果你给它“15,2”
它会显示错误的原因WHERE Code = @Code
由于您未正确设置该变量,因此导致了0行受影响。 您必须为其分配有效值。