使用不存在和插入的最佳方法是啥?

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 记录是不是存在的最佳方法是啥?

Boto:检查 CloudFormation 堆栈是不是存在的最佳方法是啥?

检查属性是不是存在的最佳方法是啥? [复制]