表中具有唯一标识符类型的 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的主要内容,如果未能解决你的问题,请参考以下文章

在具有标识列的表中插入 select from

这个 cfqueryparam 内存泄漏有解决方案吗?

生成 C# 长唯一 ID

核心数据获取唯一属性

将数据导入现有表,唯一条目

MySQL 从具有重复引用条目的联合表中选择唯一记录