检查记录是否存在,然后在数据库表中插入新行?

时间:2019-08-23 21:34:52

标签: sql coldfusion sybase sybase-ase

我正在尝试改进正在处理的旧代码。可以简化当前代码,并使用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然后运行Insert语句吗?如果有人有好的榜样或建议,请告诉我。谢谢。

3 个答案:

答案 0 :(得分:3)

我不知道/不能使用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)

答案 1 :(得分:1)

您的问题是您要改善代码。既然如此,让我们从此开始。你有:

<cfif !checkUser.recordcount>

那不是真正可读或直观的。这是表达这种情况的另一种方法:

<cfif checkUser.recordcount eq 0>

接下来,在不太可能发生的情况下,您发布了实际代码,您的checkUser查询将在table1中查找记录,如果没有记录,则将记录放入另一个表inter_work_tbl中。似乎有点可笑。

接下来,您从名为contact的表中获取信息,并将其插入到inter_work_tbl表中。即使您认为您总是在联系表中有记录,如果没有,该怎么办?您的插入查询由于未定义的变量而崩溃。另外,为什么在表inter_work_tbl中需要名称?您已经在联系人表中。您无缘无故破坏规范化。

就将代码简化为仅使用sql而言,@ markp的答案向您展示了如何做到这一点。

答案 2 :(得分:0)

对不起,我的评论没有50的声誉,因此我将以此作为答复。听起来您可以简单地使用sql merge语句来完成此操作。

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc36272.1572/html/commands/commands89.htm

相关问题