检查记录是否存在然后在数据库 table 中插入新行?
Check if record exists then insert new row in database table?
我正在尝试改进我正在处理的旧代码。目前的代码可以简化,使用SQL来处理插入。这是示例:
<!--- Check if user exists in Table 1 --->
<cfquery name="checkUser" datasource="#application.datasource#">
SELECT user_id
FROM table1
WHERE user_id = '#session.user_id#'
</cfquery>
<cfif !checkUser.recordcount>
<cfset password = functions.encryptPsw("form.pswd") />
<cfquery name="getInfo" datasource="#datasource#">
SELECT fname, lname
FROM contact
WHERE userid = #session.user_id#
</cfquery>
<cfquery name="insertUser" datasource="#application.database#">
INSERT INTO inter_work_tbl (
user_id,
first_name,
last_name,
password
) VALUES (
'#session.user_id#',
'#trim(getInfo.fname)#',
'#trim(getInfo.lname)#',
'#password#'
)
</cfquery>
</cfif>
我想知道这是否可以通过 Sybase
SQL 并使用 IF NOT EXISTS
然后 运行 插入语句来完成?如果有人有好的例子或建议,请告诉我。谢谢。
我不会 know/work-with coldfusion 所以不确定我是否正确阅读了逻辑...
- 如果
table1
但 中不存在记录
- 记录确实在
contact
然后 退出
- 在
inter_work_tbl
中插入一行
一般的 T-SQL 查询看起来像(注意:将 T-SQL 与 coldfusion 变量的引用混合):
insert into inter_work_tbl
(user_id
,first_name
,last_name
,password)
select '#session.user_id#',
c.fname,
c.lname,
'#password#'
from contact c
where c.userid = #session.user_id#
and not exists(select 1
from table1 t
where t.user_id = c.userid)
你的问题是说你想改进你的代码。既然如此,那我们就从这里开始吧。你有:
<cfif !checkUser.recordcount>
这不是真正可读或直观的。这是表达该条件的另一种方式:
<cfif checkUser.recordcount eq 0>
接下来,万一您发布了实际代码,您的 checkUser 查询将查找 table1 中的记录,如果有 none,则将记录放入不同的 table ] - inter_work_tbl。这似乎有点冒险。
接下来,您从一个名为 table 的联系人那里获取信息并将其插入您的 inter_work_tbl table。即使您认为联系人 table 中总会有记录,但如果没有怎么办?由于未定义的变量,您的插入查询将崩溃。另外,为什么需要 table inter_work_tbl 中的名称?您已经有联系人 table。您无缘无故地破坏规范化。
就简化代码以仅使用 sql 而言,@markp 的回答向您展示了如何做到这一点。
抱歉,我没有评论的 50 声望,所以我回复此作为答案。听起来您可以简单地使用 sql merge
语句来完成此操作。
我正在尝试改进我正在处理的旧代码。目前的代码可以简化,使用SQL来处理插入。这是示例:
<!--- Check if user exists in Table 1 --->
<cfquery name="checkUser" datasource="#application.datasource#">
SELECT user_id
FROM table1
WHERE user_id = '#session.user_id#'
</cfquery>
<cfif !checkUser.recordcount>
<cfset password = functions.encryptPsw("form.pswd") />
<cfquery name="getInfo" datasource="#datasource#">
SELECT fname, lname
FROM contact
WHERE userid = #session.user_id#
</cfquery>
<cfquery name="insertUser" datasource="#application.database#">
INSERT INTO inter_work_tbl (
user_id,
first_name,
last_name,
password
) VALUES (
'#session.user_id#',
'#trim(getInfo.fname)#',
'#trim(getInfo.lname)#',
'#password#'
)
</cfquery>
</cfif>
我想知道这是否可以通过 Sybase
SQL 并使用 IF NOT EXISTS
然后 运行 插入语句来完成?如果有人有好的例子或建议,请告诉我。谢谢。
我不会 know/work-with coldfusion 所以不确定我是否正确阅读了逻辑...
- 如果
table1
但 中不存在记录
- 记录确实在
contact
然后 退出
- 在
inter_work_tbl
中插入一行
一般的 T-SQL 查询看起来像(注意:将 T-SQL 与 coldfusion 变量的引用混合):
insert into inter_work_tbl
(user_id
,first_name
,last_name
,password)
select '#session.user_id#',
c.fname,
c.lname,
'#password#'
from contact c
where c.userid = #session.user_id#
and not exists(select 1
from table1 t
where t.user_id = c.userid)
你的问题是说你想改进你的代码。既然如此,那我们就从这里开始吧。你有:
<cfif !checkUser.recordcount>
这不是真正可读或直观的。这是表达该条件的另一种方式:
<cfif checkUser.recordcount eq 0>
接下来,万一您发布了实际代码,您的 checkUser 查询将查找 table1 中的记录,如果有 none,则将记录放入不同的 table ] - inter_work_tbl。这似乎有点冒险。
接下来,您从一个名为 table 的联系人那里获取信息并将其插入您的 inter_work_tbl table。即使您认为联系人 table 中总会有记录,但如果没有怎么办?由于未定义的变量,您的插入查询将崩溃。另外,为什么需要 table inter_work_tbl 中的名称?您已经有联系人 table。您无缘无故地破坏规范化。
就简化代码以仅使用 sql 而言,@markp 的回答向您展示了如何做到这一点。
抱歉,我没有评论的 50 声望,所以我回复此作为答案。听起来您可以简单地使用 sql merge
语句来完成此操作。