erlang - 在 Erlang ODBC 中处理 `nvarchar(MAX)` 问题的任何解决方法?

标签 erlang odbc elixir

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

例如运行 SELECT 'Bob' [name], 50 [age] FOR JSON PATH应该给出以下内容:

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>>
   ]
 ]}

在另一次运行中......
{:selected, ['JSON_F52E2B61-18A1-11d1-B105-00805F49916B'],
 [[<<0, 0, 0, 0, 0, 0, 0, 0, 207, 63, 70, 190, 0, 5, 0, 142, 0, 0, 0, 0, 0, 0, 0, 0, 204, 63, 69, 190, 253, 6, 0, 138, 7, 0, 0, 0, 67, 0, 0, 0, 205, 63, 68, 190, 0, 7, 0, 137, 112, 97>>]]}

我正在使用以下连接设置:
timeout: 30_000,
auto_commit: :on,
binary_strings: :on,
tuple_row: :off,
scrollable_cursors: :off,
trace_driver: :off,
extended_errors: :on

FOR JSON clause is of type nvarchar(MAX) 的输出.

请有任何解决方法来处理 nvarchar(MAX) 的问题在 Erlang ODBC 中。

最佳答案

有一个在 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
    )

关于erlang - 在 Erlang ODBC 中处理 `nvarchar(MAX)` 问题的任何解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56318455/

相关文章:

erlang - 如何创建一个包含一列的 mnesia 表并从那里读取/写入?

c++ - 当连接池打开时打开第二个连接时 SQL Native Client 崩溃?

java - 如何增加 ODBC 中的字符限制

erlang - erlang 是否记录进程何时启动?

erlang - 如何在氮中调用erlang函数?

elixir - 为什么在布局中调用时 "Mix.env()"在生产中会变为 nil?

elixir - Ecto:使用 has_many 关联订购集合中的预加载数据

elixir - 在 Elixir 中将字符串转换为整数

list - 从Erlang中的列表中删除重复的元素

c# - SQLGetInfo - 如何使用此函数