SQL Server存储过程插入长字符串时出错:字符串后引号未闭合

Posted

技术标签:

【中文标题】SQL Server存储过程插入长字符串时出错:字符串后引号未闭合【英文标题】:SQL Server Stored procedure error inserting long strings: Unclosed quotation mark after the character string 【发布时间】:2017-02-27 22:15:16 【问题描述】:

我正在尝试使用存储过程将 JSON 格式的长字符串(即#jsonLayoutProperties#)插入到 MS SQL Server 表中。字符串可能很长,例如10,000 个字符+。我应该在存储过程中使用哪个cfsqltypecf_sql_longvarchar 似乎是唯一的选择,似乎没有映射到 nvarchar(max)cfsqltype

我得到的错误如下。看来该字符串正在被截断。非常欢迎任何帮助。

错误:

执行数据库查询时出错。

[Macromedia][SQLServer JDBC 驱动程序][SQLServer]不闭引号 在字符串之后。

CFStoredproc:

<cfstoredproc datasource="docs" procedure="UpdateLayout">
    <cfprocparam cfsqltype="cf_sql_varchar" type="in" value="#Session.Userdata['ID']#">                 <!--- @AccountID --->
    <cfprocparam cfsqltype="cf_sql_integer" type="in" value="#ObjectID#">                               <!--- @ObjectID --->
    <cfprocparam cfsqltype="cf_sql_longvarchar" type="in" value="#jsonLayoutProperties#">               <!--- @Properties --->
    <cfprocparam cfsqltype="cf_sql_varchar" type="in" value="0">                                        <!--- @Revision --->
    <cfprocparam cfsqltype="cf_sql_integer" type="in" value="#Session.Userdata['ID']#">                 <!--- @UpdatedID --->
    <cfprocparam cfsqltype="cf_sql_integer" type="inout" value="0" variable="LayoutID">                 <!--- @ID --->
</cfstoredproc>

【问题讨论】:

(编辑)如果您在SSMS中运行执行过程(具有相同的值),它是否执行成功? RE:似乎没有映射到 nvarchar(max) 的 cfsqltype 有,而且几乎是你猜到的:cf_sql_longnvarchar(注意中间的“n”代表 n varchar) 【参考方案1】:

这可能不是类型问题。

Unclosed quotation mark after the character string.

对我来说意味着你的字符串中可以有未转义的引号。你能检查一下吗?

【讨论】:

变量是有效的 json (isJSON = YES) 所以我认为字符串本身是好的。该错误是由于 cf_sql_longvarchar 仅将前 n 个字符传递给数据库而引起的(我认为)。 @Paul 你试过用 CF_SQL_NVARCHAR 代替吗?重读后发现你用的是nvarchar而不是varchar 我已经尝试过 cf_sql_nvarchar、cf_sql_longvarchar、cf_sql_text 和“cf_sql_max”,只是为了看看发生了什么,结果都是一样的。 你用更短的字符串成功了吗?我会尝试较短的数据类型,然后尝试使用有效的数据类型,并尝试确定它中断的长度 鉴于 procparams 应该转义撇号,为什么你会认为它是一个未转义的字符?

以上是关于SQL Server存储过程插入长字符串时出错:字符串后引号未闭合的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 存储过程中将 varchar 转换为 int 时出错

SQL Server 存储过程出错,超时时间已过

从视图调用时未插入表的存储过程 - SQL Server 2014

将 xml 字符串参数传递给 SQL Server 存储过程

sql server 2014怎么装的过程中出错

SQL Server 列存储索引更新/插入存储过程