在Erlang ODBC中处理“nvarchar(MAX)”问题有什么解决方法吗?

在Erlang ODBC中处理“nvarchar(MAX)”问题有什么解决方法吗?,erlang,odbc,elixir,Erlang,Odbc,Elixir,Erlang ODBC中似乎存在一些与nvarchar(MAX)和varchar(MAX)相关的问题 例如,为JSON路径运行选择'Bob'[name],50[age],应给出以下信息: JSON_F52E2B61-18A1-11d1-B105-00805F49916B ----------------------------------------- [{"name":"Bob","age":50}] Erlang ODBC产生: {:selected, ['JSON_F52E2B61-18

Erlang ODBC中似乎存在一些与
nvarchar(MAX)
varchar(MAX)
相关的问题

例如,为JSON路径运行
选择'Bob'[name],50[age],应给出以下信息:

JSON_F52E2B61-18A1-11d1-B105-00805F49916B
-----------------------------------------
[{"name":"Bob","age":50}]
Erlang ODBC产生:

{:selected, ['JSON_F52E2B61-18A1-11d1-B105-00805F49916B'],
 [
   [
     <<0, 0, 80, 0, 114, 0, 111, 0, 75, 246, 34, 87, 97, 33, 0, 128, 32, 0, 70, 0, 105, 0, 108, 0, 74, 246, 33, 87, 92, 34, 0, 128, 105, 0, 99, 0, 114, 0, 111, 0, 73, 246, 32, 87, 102, 35, 0, 128, 32,
       0>>
   ]
 ]}
的输出


请了解在Erlang ODBC中处理
nvarchar(MAX)
问题的解决方法

有一种在windows上运行良好的解决方案:通过ODBC使用OLEDB提供程序,如下所示

 conn = "Provider=MSDASQL;DRIVER={SQL Server};SERVER=#{server};PORT=#{port};DATABASE=#{db};UID=#{uid};PWD=#{pwd};"

    :odbc.connect(
      to_charlist(conn),
      timeout: 30_000,
      # auto_commit: true,
      binary_strings: :on,
      tuple_row: :off,
      # scrollable_cursors: :off,
      # trace_driver: :off,
      extended_errors: :on
    )

如果将
binary\u strings
配置为
:off
,您会得到什么?@SteveVinoski相同的随机二进制结果我找不到任何明确的方法,但如果ODBC驱动程序支持“for json”子句,我会非常惊讶。ODBC实际上不支持ANSI标准SQL之外的任何东西,如果我是你,我首先会问SQL Server ODBC驱动程序是否支持“FOR JSON”子句。你可能想在这里发布一个问题:因为你更可能在那里得到一个知识渊博的答案。FWIW如果错误仍然存在,我不会感到非常惊讶。一个人在ODBC驱动程序13上报告了错误。2019年2月28日,还有人报告说仍然看到这个问题——因此,如果这个问题仍然存在,我不会感到惊讶。
timeout: 30_000,
auto_commit: :on,
binary_strings: :on,
tuple_row: :off,
scrollable_cursors: :off,
trace_driver: :off,
extended_errors: :on
 conn = "Provider=MSDASQL;DRIVER={SQL Server};SERVER=#{server};PORT=#{port};DATABASE=#{db};UID=#{uid};PWD=#{pwd};"

    :odbc.connect(
      to_charlist(conn),
      timeout: 30_000,
      # auto_commit: true,
      binary_strings: :on,
      tuple_row: :off,
      # scrollable_cursors: :off,
      # trace_driver: :off,
      extended_errors: :on
    )