cfqueryparam,表中有uniqueidentifier类型

时间:2012-07-02 16:14:52

标签: coldfusion uniqueidentifier cfquery cfqueryparam

我有一个查询,我试图将值插入表中,其中一个值(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作为类型,但是无法使我的代码工作。我不断收到“从字符串转换为uniqueidentifier时转换失败”的错误。我在我生成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>

非常感谢任何帮助。提前谢谢。

********** EDIT ************* *******************

找到答案:

<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 个答案:

答案 0 :(得分:0)

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