2016-04-16 3 views
2

Ich erhalte den folgenden Fehler eine gespeicherte Prozedur mit der Tds Bibliothek für ElixirHOW TO: Stored Procedures mit Tds Bibliothek in Elixir nennen

Die gespeicherte Prozedur get_account besteht zu nennen versucht und hat genau einen Parameter @id

iex(5)>Tds.Connection.query(pid, "get_account",[%Tds.Parameter{name: "@id", value: 1}])               
{:error, 
%Tds.Error{message: nil, 
    mssql: %{class: 16, length: 252, line_number: 0, msg_text: "Procedure or function 'get_account' expects parameter '@id', which was not supplied.", number: 201, proc_name: "get_account", 
    server_name: "localhost\\SQLEXPRESS", state: 4}}} 
iex(6)> 

Der Versuch, dies mit Tds.proc(pid, "get_account",[1]) auch nicht

+0

Dies ist wahrscheinlich einer jener Fälle, in denen es einfacher ist, bis auf die Erlang ODBC Schicht fallen zu lassen und tun, was Sie zu tun versuchen. Siehe diese Frage (http://stackoverflow.com/questions/18929391/how-to-call-stored-procedure-taking-array-using-odbcparam-query-in-erlang) für weitere Details. –

Antwort

1

Abhilfe funktioniert:

Tds.query(pid, "get_account 1",[]) 

Verwenden Sie dies auf die gleiche Weise, wie Sie Parameter direkt an eine gespeicherte Prozedur übergeben würden, indem Sie EXEC verwenden.

Aktualisiert:

Dieses Format funktioniert auch:

params = [ 
    %Tds.Parameter{name: "@1", value: 100, type: :integer}, 
    %Tds.Parameter{name: "@2", value: 100, type: :integer}, 
    %Tds.Parameter{name: "@3", value: <<0 ,0 ,0 ,0>>, type: :binary}, 
] 
    Conn.query(s.db, "save_auth_key @1, @2, @3", params)