使用不存在和插入的最佳方法是啥?
Posted
技术标签:
【中文标题】使用不存在和插入的最佳方法是啥?【英文标题】:What's the best way to use not exists and insert?使用不存在和插入的最佳方法是什么? 【发布时间】:2015-11-06 05:15:36 【问题描述】:我正在创建一个存储过程来检查用户名是否存在,如果不存在则插入用户表,然后获取相同用户名的用户 ID。这就是我正在尝试的
alter Procedure Check_Name
(
--@idn integer,
@username varchar(25),
@password varchar(100)
--@role_id integer
)
As
Begin
INSERT INTO [user] (username,[password])
SELECT username,[password]
FROM [user] AS u
WHERE NOT EXISTS(
SELECT idn FROM [user] AS t
WHERE u.username = t.username);
End
当我尝试执行时,它说零行受到影响..问题是什么
execute Check_Name 'Pope', 'Life2Stressfull';
【问题讨论】:
好的,我改变了它..然后我无法为我的 role_id 插入 null,所以插入了一个值。现在我违反了 UNIQUE KEY 约束“UQ__user__F3DBC5722FAC4C26”。无法在对象“dbo.user”中插入重复键。重复键值为 (Franz123)。我不明白,因为我插入的用户名不是“Franz123”WHERE u.username = t.username AND t.username = @username
【参考方案1】:
你可以这样做:
IF NOT EXISTS(SELECT 1 FROM [user] AS t WHERE t.username = @username)
BEGIN
INSERT INTO [user] (username,[password]) VALUES (@username, @password)
END
【讨论】:
以上是关于使用不存在和插入的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 LEFT OUTER JOIN 检查相关行不存在的最佳方法是啥
为不存在的文件解析相对路径(如 realpath)的最佳方法是啥?
在 Rails 中,更新记录或创建新记录(如果不存在)的最佳方法是啥?
如果路径已知,检查 Firestore 记录是不是存在的最佳方法是啥?