REST API SQL存储过程转换错误(不允许从数据类型nvarchar到varbinary的隐式转换)

时间:2015-06-22 14:13:42

标签: sql-server rest stored-procedures dreamfactory

我正在使用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进行过很多的斗争,如果答案是向另一个方向发展,我会对此持开放态度。

2 个答案:

答案 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的一个问题,他们希望很快就能解决这个问题。