我是SQL和存储过程的新手,需要一些有关下面存储过程的帮助。我必须连接彼此的表:“用户”和“个人资料”。
删除用户时,也应删除用户个人资料,这就是下面的SP所做的事情。但是,当执行SP时,表中的所有UserID都显示出来(当然是因为“SELECT UserID”),这是我不想要的。
所以,我想我的问题是如何编写Sp以便它可以在不使用SELECT的情况下工作?
提前致谢。
CREATE PROCEDURE usp_DeleteUser
@UserID int
AS
BEGIN
BEGIN TRY
BEGIN TRANSACTION;
SELECT u.UserID
FROM [User] AS u INNER JOIN Profile AS p
ON u.UserID = p.UserID;
DELETE FROM Profile
WHERE UserID = @UserID;
DELETE FROM [User]
WHERE UserID = @UserID;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
RAISERROR ('Borttagningen gick inte att genomföra!',16,1)
END CATCH
END
GO
答案 0 :(得分:3)
Profile.UserID
应该是一个外键,表示与User
表的一对一关系,并指定了ON DELETE CASCADE
。然后从User
表中删除记录,Profile
表中的相关记录将自动删除。
答案 1 :(得分:3)
这句话是多余的。删除它:
SELECT u.UserID
FROM [User] AS u INNER JOIN Profile AS p
ON u.UserID = p.UserID;
答案 2 :(得分:1)
SELECT完全没必要,可能是某人作为测试添加的。您也应该在SET NOCOUNT ON
之后添加AS BEGIN
以提高效率。
答案 3 :(得分:0)
只需删除SELECT语句即可。它实际上并没有在您的查询中添加任何内容。