如何在cfquery中执行insert时保留空格?

时间:2015-03-20 15:14:21

标签: coldfusion insert foreign-keys whitespace cfquery

从一个表中选择数据并将其插入另一个表中。这个数据碰巧是第一个表的关键,但是第二个表的外键。使用cfquery,选择并插入工作没有任何问题。但是当这些数据碰巧包含多个空格时,例如"XXX ZZZ"(中间有三个空格),插入数据时会出现外键错误。使用db2,错误是-530。

我创建了一个包含2个空格,同样错误的记录。创建了一个空格,没有错误。这似乎证明,当使用cfquery插入时,ColdFusion会保留一个空格,并删除任何其他空格(如果存在)。 我甚至尝试使用replace(data," "," ","all")chr(32)来替换空间,但仍然没有运气通过多个空间并成功插入。

希望你们能帮忙解决这个问题。谢谢!

<cfquery name="GetCategories" datasource="#DbSource#" username = "#DbUserId#" password = "#DbUserPswd#">
    SELECT category, rtrim(category) as tcategory
    FROM role_category
    ORDER BY category
    FOR FETCH ONLY
</cfquery>

Populate dropdown, tried following 3 ways, neither works
1
<select name="category" id="category" size = "4"  onChange="someFunction();">
  <cfoutput query="GetCategories">   
   <option value ="#category#" >#category#</option>
  </cfoutput>
</select>
2
<select name="category" id="category" size = "4"  onChange="someFunction();">
  <cfoutput query="GetCategories">   
   <cfset cat = replace(GetCategories.category," ","&nbsp;","all")>
   <option value ="#cat#" >#cat#</option>
  </cfoutput>
</select>
3
<select name="category" id="category" size = "4"  onChange="someFunction();">
  <cfoutput query="GetCategories">   
   <cfset tcat = replace(GetCategories.tcategory," ","&nbsp;","all")>
   <option value ="#tcat#" >#tcat#</option>
  </cfoutput>
</select>

in the action file:

 <cfquery name="InsertUserRole" datasource="#DbSource#" username = "#DbUserId#" password = "#DbUserPswd#">
        INSERT INTO role(role,desc, category)
        VALUES ('#_role#','#form.desc#','#form.category#')
 </cfquery>

来自Coldfusion的错误消息是:  DB2 SQL错误:SQLCODE = -530,SQLSTATE = 23503,SQLERRMC = CATEGORY1,DRIVER = 3.63.123

从评论中更新:

我尝试添加这个,但是没有这样做:

<cfqueryparam cfsqltype="cf_sql_char" value="#form.category#">

1 个答案:

答案 0 :(得分:-1)

bs2009,就您在问题中描述的内容而言,问题似乎与外键的大小有关。请检查第二个表中的外键是否与第一个表中的主键大小相同。 例如。如果第一个表中的主键定义为CHARACTER(10),则第二个表中的外键也应定义为CHARACTER(10)