【发布时间】:2016-09-14 22:10:14
【问题描述】:
所以这是一个在这里被多次问过的老问题,但显而易见的解决方案对我不起作用。我有一个查询:
INSERT Table1
(
schoolName
)
VALUES
(
<cfqueryparam value="#schoolName#" cfsqltype="CF_SQL_VARCHAR" maxlength="50">
)
运行此查询时,我收到了此处报告了数十次的“字符串或二进制数据将被截断”错误。我查看了我的表的“设计”选项,schoolName 的最大长度为 20,而我尝试插入的值的长度为 22。所以我认为这是一个简单的修复,我只是运行:
ALTER TABLE Table1
ALTER COLUMN schoolName VARCHAR(50)
但是我再次运行了这个查询,得到了同样的错误!还有什么我需要做的或者我错过了什么愚蠢的事情吗?会不会是缓存问题?据我所知,错误是说我正在尝试插入长度大于设置允许的列的字符串,因此(众多)解决方案之一是扩展最大列长度。
【问题讨论】:
-
cfqueryparam 标签是 ColdFusion 绑定变量和保护数据库免受 SQL 注入的方式。所以标签被正确使用,变量“schoolName”的值被插入到表中。
-
不使用 ColdFusion 尝试时会发生什么?
-
是的,这是一个冷融合问题而不是 Sql 问题。 (基本上是丹的观点)。对表名执行 sp_help 以确认您确实将长度更改为 50(确认更改已被接受)。还有一件事要确认。 Cold fusion 可能会在您进行更改之前查看表大小。它可能认为它仍然是旧的,我假设尺寸较小。您可能需要以某种方式循环您的冷融合服务器以再次查看数据库。
-
Cold Fusion服务器的回收如何?它可能会查看一次数据库,而不是每次执行 sql。因此它可能认为该表仍然具有旧的较小尺寸。
-
每次我在这里发布冷融合问题时都会被问到这个问题 @ConorBaumgart - 如果你不是在开玩笑,我很确定 Dan 正在谈论基本的故障排除步骤;- ) 即通过暂时从混合物中移除 CF 来确认哪一方是问题所在。直接在 SQL Server 中执行相同的 SQL 是否有效?如果没有,你有你的答案。否则,问题出在CF方面。如果您已确认后者,那么就像 MT 所说,也许 CF 出于某种原因没有接收元数据更改。所以回收不是一个坏主意。
标签: sql sql-server coldfusion