假设我们有执行简单操作的存储过程
CREATE PROCEDURE [dbo].[AddNewAuthorReturnID]
(
@Author_Name VARCHAR(MAX),
@Author_ID int OUTPUT
)
AS
SET NOCOUNT OFF;
BEGIN
INSERT INTO AUTHORS (@Author_Name)
VALUES (@Author_Name)
SET @Author_ID = SCOPE_IDENTITY()
SELECT @Author_ID
END
在上述过程中,重新调整的id表示操作成功。
考虑一下
CREATE PROCEDURE [dbo].[DeleteAuthor]
(
@Author_ID int
)
AS
SET NOCOUNT OFF;
BEGIN
DELETE FROM AUTHORS
WHERE
(Author_ID = @Author_ID)
END
我们怎么知道这个操作 成功和记录(作者)是 如果我们在上面使用,成功删除 程序?
与更新操作相同吗?
感谢
答案 0 :(得分:3)
您可以返回@@ROWCOUNT
以确定您的上一个语句是否影响了任何记录。
答案 1 :(得分:2)
您可以选择@@ rowcount
它会显示受影响的行。
e.g
CREATE PROCEDURE [dbo].[DeleteAuthor]
(
@Author_ID int
)
AS
SET NOCOUNT OFF;
BEGIN
DELETE FROM AUTHORS
WHERE
(Author_ID = @Author_ID)
SELECT @@ROWCOUNT
END
这也适用于更新。
CREATE PROCEDURE [dbo].[UpdateAuthor]
(
@Author_ID int
)
AS
SET NOCOUNT OFF;
BEGIN
UPDATE AUTHORS
SET AuthorName = 'John'
WHERE
(Author_ID = @Author_ID)
SELECT @@ROWCOUNT
END
或者您可以使用@@ Error并引发错误ID @@ rowcount> 1(如果你只想更新一行)。
e.g
CREATE PROCEDURE [dbo].[DeleteAuthor]
(
@Author_ID int
)
AS
SET NOCOUNT OFF;
BEGIN
DELETE FROM AUTHORS
WHERE
(Author_ID = @Author_ID)
IF @@ROWCOUNT <>1
BEGIN
RAISERROR ('An error occured',10,1)
RETURN -1
END
END
正如Giorgi所说,这将作为返回码返回。
答案 2 :(得分:2)
您可以使用return语句从存储过程返回值。如果没有错误,@@ERROR
变量等于零。
CREATE PROCEDURE [dbo].[DeleteAuthor]
(
@Author_ID int
)
AS
SET NOCOUNT OFF;
BEGIN
DELETE FROM AUTHORS
WHERE
(Author_ID = @Author_ID)
Return @@ERROR
END