为Windows使用odbctest和Snowflake 64位ODBC驱动程序:
使用此DDL在雪花中创建了一个表:
CREATE TABLE "SFDEST"."QAUSER"."BT14726"
("VARCHAR_10_COL" VARCHAR (10),
"VARCHAR_4000_COL" VARCHAR (4000) ,
"CHAR_10_COL" CHAR (10) ,
"CLOB_COL" VARIANT,
"ROWID" CHAR (18) NOT NULL )
然后尝试准备插入语句:尝试执行SQL:
INSERT INTO "SFDEST"."QAUSER"."BT14726"
("VARCHAR_10_COL",
"VARCHAR_4000_COL",
"CHAR_10_COL",
"ROWID",
"CLOB_COL")
VALUES ( ?, ?, ?, ?, ?)
但返回此错误:
目标插入语句的准备失败。 SQL编译错误:表达式类型与列数据类型不匹配,期望为VARIANT但为列CLOB_COL获得了VARCHAR(1)
这是odbc跟踪的相关部分:
sqdrsvc 3dfc-52bc ENTER SQLPrepareHSTMT 0x000000435C961620UCHAR * 0x000000435D262720 [140]“插入” SFDEST“。” QAUSER“。” BT14726“(” VARCHAR_10_COL“,“ VARCHAR_4000_COL”,“ CHAR_10_COL”,“ ROWID”,“ CLOB_COL”)VALUES(?,?,?,?,?)”SDWORD 140
sqdrsvc 3dfc-52bc EXIT SQLPrepare,包含返回码-1(SQL_ERROR)HSTMT 0x000000435C961620UCHAR * 0x000000435D262720 [140]“插入” SFDEST“。” QAUSER“。” BT14726“(” VARCHAR_10_COL“,“ VARCHAR_4000_COL”,“ CHAR_10_COL”,“ ROWID”,“ CLOB_COL”)VALUES(?,?,?,?,?)”SDWORD 140DIAG [22000] SQL编译错误:表达式类型与列数据类型不匹配,期望为VARIANT但得到了CLOB_COL列的VARCHAR(1)(2023)
如果您有一个格式为有效JSON Blob的字符串,则需要使用PARSE_JSON将其转换为实际的变体类型,以便SnowFlake能够识别出它。
大概是这样:
INSERT INTO "SFDEST"."QAUSER"."BT14726"
("VARCHAR_10_COL",
"VARCHAR_4000_COL",
"CHAR_10_COL",
"ROWID",
"CLOB_COL")
VALUES ( ?, ?, ?, ?, PARSE_JSON(?))