首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在fsharp.data.sqlclient中使用SQL语句?

如何在fsharp.data.sqlclient中使用SQL语句?
EN

Stack Overflow用户
提问于 2014-10-08 10:40:10
回答 3查看 1.2K关注 0票数 14

我有以下示例代码。目标是运行具有多个输入参数的SQL语句。

代码语言:javascript
复制
[<Literal>]
let connectionString = @"Data Source=Localhost;Initial Catalog=Instrument;Integrated Security=True"
[<Literal>]
let query = "SELECT MacroName, MacroCode FROM Instrument WHERE MacroCode IN (@codeName)"

type MacroQuery = SqlCommandProvider<query, connectionString>
let cmd = new MacroQuery()
let res = cmd.AsyncExecute(codeName= [|"CPI";"GDP"|]) |> Async.RunSynchronously

但是,codeName被推断为字符串类型,而不是数组或列表,并给我一个错误。

或者,我可以在没有where语句的情况下运行查询,并根据结果进行过滤。但是,在许多其他返回数百万行的情况下,我更倾向于在SQL服务器级别过滤数据以提高效率。

我在fsharp.data.sqlclient的文档中找不到任何相关的示例。请帮帮我!

EN

回答 3

Stack Overflow用户

发布于 2014-10-08 21:21:38

文档中的“请参阅表值参数(TVP)”部分:http://fsprojects.github.io/FSharp.Data.SqlClient/configuration%20and%20input.html

票数 6
EN

Stack Overflow用户

发布于 2016-01-13 10:04:30

如果你对IN列表中的值有一个上限n,你可以只做n个参数。如果这是无法控制的,我担心TVP的建议是你最好的选择。SQL库不太可能直接支持这一点的原因是,类型是基于sp_describe_undeclared_parameters的结果生成的;没有T- FSharp.Data.SqlClient解析器。在这种情况下,我们有一个个位数的上限,并且不愿意更改数据库,所以这个选项对我们有效。

票数 4
EN

Stack Overflow用户

发布于 2018-08-27 17:44:14

您可以使用STRING_SPLIT来抽象表值参数的使用。看起来你还得先声明参数。

代码语言:javascript
复制
DECLARE @param varchar(1000) = @commaSeparatedList
SELECT Col1 FROM MyTable
WHERE Col2 IN (
  SELECT value FROM STRING_SPLIT(@param, ',')
)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26248397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档