我正在使用dreamfactory REST API来调用SQL Server存储过程。 SQL Server数据库使用用户定义的数据类型来存储过程的一些参数。
以下是我通过Dreamfactory的API Docs区域调用它的方法:
{
"params": [
{
"name": "Number",
"param_type": "IN",
"value": "123456"
},
{
"name": "IdNumber",
"param_type": "IN",
"value": "0x0048F1F5A7DC5A2A431CBAD70270E59C5FA0"
}
],
"schema": {
"_field_name_": ""
},
"wrapper": "",
"returns": ""
}
错误是:
不允许从数据类型nvarchar到varbinary的隐式转换
我认为问题在于第二个参数IdNumber
,它是用户定义的数据类型。如果我删除参数,我只会收到IdNumber
预期和丢失的错误。
数据类型是用户定义的类型,我不确定为什么要将其转换为varbinary
。我不知道转换或存储值的任何方法,因为它使用REST API。我是否认为我无法将任何内容转换或转换为存储过程参数?
我知道这是一个非常具体的问题,但感谢任何帮助。在这个项目中,我一直在和dreamfactor进行过很多的斗争,如果答案是向另一个方向发展,我会对此持开放态度。
答案 0 :(得分:1)
我相信它试图将其转换为varbinary的原因是:
// Switch to admin database and get list of databases.
db = db.getSiblingDB("admin");
dbs = db.runCommand({ "listDatabases": 1 }).databases;
// Iterate through each database.
dbs.forEach(function(database) {
db = db.getSiblingDB(database.name);
// Get the Group collection
collection = db.getCollection("Group");
// Iterate through all documents in collection.
/*
collection.find().forEach(function(doc) {
// Print the meldingId field.
print(doc.meldingId);
});
*/
var meldingIds = collection.distinct('meldingId');
print(meldingIds);
});
我相信值中的前导0x正在触发它。通常,以0x开头的值被视为十六进制值。
我不熟悉MS SQL Server,但是,如果您不打算允许用户定义的数据类型为二进制,也许您可以过滤输入以不允许前导0x。
希望这有帮助
答案 1 :(得分:0)
在与Dreamfactory技术支持部门合作之后,这是Dreamfactory的一个问题,他们希望很快就能解决这个问题。