表中具有唯一标识符类型的 cfqueryparam
Posted
技术标签:
【中文标题】表中具有唯一标识符类型的 cfqueryparam【英文标题】:cfqueryparam with uniqueidentifier type in table 【发布时间】:2012-07-03 02:06:13 【问题描述】:我有一个查询,我试图将值插入表中,其中一个值 (ImportID) 是数据库中的 uniqueidentifier 类型。我查看了 adobe CF 文档,发现 cf_sql_char 和 cf_sql_idstamp 都应该适用于我的 uniqueidentifier 类型的 cfquery 参数。我也读了这个帖子,上面说了同样的话:What is the most appropriate Coldfusion cfsqltype to use for MS SQL's uniqueidentifier field type?
我发现其他一些地方使用 cfqueryparam 标记的“maxlength”参数和 cf_sql_char 作为类型,但无法使我的代码工作。我不断收到“从字符串转换为唯一标识符时转换失败”的错误。我将我的代码包含在我生成 UID 的位置并尝试在下面插入(我替换了一些变量名并取出了所有其他列以进行导入):
<cfscript>
ImportID = createUUID();
</cfscript>
<cfquery name="INSERTTableName" datasource="#Application.Datasource#">
INSERT INTO TableNameImport(
ImportID
)
VALUES(
<cfqueryparam value="#variables.ImportID#" cfsqltype="CF_SQL_CHAR">
)
</cfquery>
任何帮助将不胜感激。提前致谢。
*********************************编辑****************** *******************
找到答案:
<cfquery name="INSERTTableName" datasource="#Application.Datasource#">
DECLARE @ImportID uniqueidentifier
SET @ImportID = NEWID()
INSERT INTO TableNameImport(
ImportID
)
VALUES(
@ImportID
)
</cfquery>
问题是从 Coldfusion 调用创建的 UUID 与在 Microsoft SQL Server 中创建的格式不同。
【问题讨论】:
【参考方案1】:你是对的。 SQL 使用 GUID,createUUID 使用 UUID。两者都是 32hex 值,但使用不同的文本格式(破折号的位置)。并且使用不同的计算来生成随机值。如果您将文本格式更改为具有 GUID 破折号位置或发送二进制值,则可以使用 UUID。对于上面的示例,如果 cf 需要对该值的引用,您可能还希望返回 GUID。
【讨论】:
是的,当我稍后为该插入选择记录时,我确实将 GUID 返回到coldfusion。感谢您的回复!以上是关于表中具有唯一标识符类型的 cfqueryparam的主要内容,如果未能解决你的问题,请参考以下文章