2016-02-01 7 views
6

私はSqlCommandProviderを使用していますで、コレクションとしてのパラメータを指定し、CommandTextを

let ids=["B058A99-C4B2-4CC3-BA9F-034B1F1ECCBD";"A09C01C-D51B-41C1-B44C-0995DD285088"] 
[<Literal>] 
let qLogo ="""SELECT Id,LogoUrl FROM Hotels WHERE Id IN (@IDS)""" 
let queryLogo = new SqlCommandProvider<qLogo,constring>() 
queryLogo .Execute(ids)//i need to be able to pass a collection here 

`

+0

|> Seq.collect queryLogo.Execute'? (私はそれをテストしていませんが、それは近くに来る必要があります) – Carsten

+1

'ids |> Seq.collect queryLogo.Execute'はIDごとに別々にサーバーに行きます。おそらく500時間以上のIDを持つことになりますので時間がかかります – Evren

+0

'queryLogo.Execute'のタイプは何ですか?上記のqLogoのSqlCommandProviderの –

答えて

2

かいつまんで、SqlCommandProviderがさえない私は、ID、コレクション内の各IDのいくつかのデータを取得する必要がありますする方法これを行う正しいタイプのプロバイダ(クエリを構築するために文字列の連結を考慮しないと仮定します)。理由は、SQL Serverは、ストアドプロシージャを呼び出してテーブル値付きのパラメータを渡すだけで、配列パラメータを受け入れるためです。

したがって、ストアドプロシージャを呼び出すには、これを達成するためにSqlProgrammabilityProviderが必要です。しかし、タイプprovider documentation(「テーブル値パラメータ(TVP)」までスクロールダウン)で説明されているように、テーブルタイプとストアドプロシージャを作成する必要があります。

関連の議論:何 `IDSについてHow to use SQL IN statement in fsharp.data.sqlclient?

関連する問題