我有2张桌子
表1
userid int
username varchar(25)
password varchar(25)
siteid int (foreign key)
表2
siteid int
siteurl varchar(200)
我想使用存储过程触发插入
我将用户名,密码和siteurl作为参数。
现在,当我想插入数据时,我需要检查条件
目前我正在获取第一个站点ID,然后将站点ID作为参数传递,但这意味着站点和数据库之间的流量将加倍。
但是如果单个存储过程发生同样的情况,则会有差异
答案 0 :(得分:1)
你在找这样的东西吗?
CREATE PROCEDURE addnewuser
@username VARCHAR(25),
@password VARCHAR(25),
@siteurl VARCHAR(200)
AS
SET NOCOUNT ON;
IF NOT EXISTS(SELECT *
FROM userlogin u JOIN sites s
ON u.siteid = s.siteid
WHERE u.username = @username
AND s.siteurl = @siteurl)
BEGIN
INSERT INTO sites (siteurl)
VALUES (@siteurl);
INSERT INTO userlogin (username, password, siteid)
VALUES (@username, @password, SCOPE_IDENTITY());
END
ELSE
RAISERROR ('User already exists', 16, 1);
GO
这是 SQLFiddle 演示。 取消评论上一次EXEC
,然后点击Build Schema
以查看它不会让您再次插入同一用户