我有一个查询,我试图将值插入到表中,其中一个值(ImportID)在数据库中属于唯一标识符类型。我查看了Adobe CF文档,发现cf_sql_char和cf_sql_idstamp都应该适用于我的唯一标识符类型的cfquery参数。我还读了这个线程,它说了同样的事情:用于MS SQL的唯一标识符字段类型最合适的Coldfusion cfsqltype是什么?
我发现其他一些地方使用 "maxlength" 参数作为 cfqueryparam 标签并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>
问题是从冷融合调用创建的UUID与Microsoft SQL Server中创建的格式不同。
你是对的。 SQL 使用 GUID,createUUID man man a UUID。 两者都是 32 十六进制值,但使用不同的文本格式(破折号的位置)。 并使用不同的计算来生成随机值。 如果将文本格式更改为具有 GUID 短划线位置或发送二进制值,则可以使用 UUID。 对于上面有效的示例,如果 cf 需要对该值的引用,您可能还希望返回 GUID。