首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用if exists

使用if exists
EN

Stack Overflow用户
提问于 2009-11-04 23:25:22
回答 6查看 419关注 0票数 0

我在刷新时插入重复项时遇到问题。我们的团队在这里决定在sql中使用'if exists‘是阻止重复插入的最好方法。但是,如果参数设置为null怎么办?

代码语言:javascript
复制
string cmdText = " if (not exists(select * from table where field1 = @field1 and field2 = @field2 and field3 = @field3)) Insert into table(field1,field2,field3) Values(@field1,@field2,@field3)";

if (txtfield1.text != "")
    cmd.Parameters.Add(new SqlParameter("@field1", txtfield1.text));
else
    cmd.Parameters.Add(new SqlParameter("@ field1", DBNull.Value));

    cmd.Parameters.Add(new SqlParameter("@field2", txtfield2));
    cmd.Parameters.Add(new SqlParameter("@field3", txtfield3));

当field1中存在空值时,这不起作用。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-11-04 23:29:21

您可以将字段包装在isnull或其他考虑到null的地方

代码语言:javascript
复制
isnull(field1, '') = isnull(@field1, '') and 
isnull(field2, '') = isnull(@field2, '') and 
isnull(field3, '') = isnull(@field, '')
票数 8
EN

Stack Overflow用户

发布于 2009-11-04 23:33:25

减少数据库的负载并从根源上解决问题不是一个更好的主意吗?

通常,当你有一个处理自己提交的页面时,这种类型的错误就会发生,即表单动作属性指向它自己,所以当有人在他们发布了一些东西后点击刷新时,发布数据仍然是‘实时的’,并被发布回页面。

一种更好的方法是将数据提交给第二个对象,该对象处理插入,然后重定向到它来自的地方,重定向清除POST数据,您可以省去许多不必要的查询。

只有我的2c

票数 3
EN

Stack Overflow用户

发布于 2009-11-04 23:32:01

代码语言:javascript
复制
where field1 IS @field1

是无效的语法

使用isnull()

所以:

代码语言:javascript
复制
string cmdText = " if (not exists(select * from table where isnull(field1, '') = isnull(@field1, '') ...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1674518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档