2

我有一个查询,我试图将值插入表中,其中一个值(ImportID)是数据库中的 uniqueidentifier 类型。我查看了 adobe CF 文档,发现 cf_sql_char 和 cf_sql_idstamp 都应该适用于我的 uniqueidentifier 类型的 cfquery 参数。我还阅读了这个线程,它说了同样的话:什么是最适合用于 MS SQL 的 uniqueidentifier 字段类型的 Coldfusion cfsqltype?

我发现其他一些地方使用 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 中创建的格式不同。

4

1 回答 1

0

你是对的。SQL 使用 GUID,createUUID 使用 UUID。两者都是 32hex 值,但使用不同的文本格式(破折号的位置)。并且使用不同的计算来生成随机值。如果您将文本格式更改为具有 GUID 破折号位置或发送二进制值,则可以使用 UUID。对于上面的示例,如果 cf 需要对该值的引用,您可能还希望返回 GUID。

于 2012-07-03T15:16:00.890 回答