【问题标题】:Create SQL Table from Random Array for WebService从随机数组为 WebService 创建 SQL 表
【发布时间】:2012-08-15 14:14:12
【问题描述】:

我有一个我正在工作的小项目,我想要做一些具体的事情,但似乎无法找到一个可行的解决方案。基本上,我在 Visual Studio 中创建了一个用于移动应用程序的 Web 服务,我们希望添加一个新功能,允许从多个用户检索客户端。为此,我需要能够将一组值传递给 WHERE IN 子句,我发现这几乎是不可能的,但我读过的其他解决方案(没有真实的过程示例)是创建一个数组值的表,然后到一个 WHERE IN (SELECT * from TEMPTABLE) 类型的场景。

所以这就是我卡住的地方,我如何将一组值传递给我的 SQL 语句,然后创建一个包含这些值的临时表(范围可以从 1 到 30 个值),这样我就可以运行了针对这些值的其他查询。我见过的大多数示例都有用值硬编码的临时表,但我需要能够为该表传递随机数量的值,所以如果将它们作为带有逗号的单个字符串传递更容易,或者如果它们需要以特定格式传递,我也可以在调用 Web 服务之前在 iOS 端执行此操作,我似乎无法弄清楚如何执行这种动态类型的表以继续下一部分.

编辑(根据评论添加一些信息)

所以一些关于系统和目的的背景信息有助于更好地理解我在做什么。数据库是一个 SQL Server (2008),已经存在表和数据,因为我正在处理的是现有 Web 应用程序的移动应用程序端口。例如,我可以使用的两个表是代理表(针对员工)和客户表(针对他们的客户),因此在某些情况下,我们的团队可以查看彼此的客户。因此,通常如果我想从一组代理中提取客户列表,我会使用 WHERE IN 语句,但对于 Web 服务,它需要将该组作为变量,因为代表可能只想看到几个团队成员或所有团队成员(这将是 iOS 应用程序中设置的选项)。

我并没有真正有效的代码,而且我知道我尝试过的大部分内容都不起作用,所以我会放一些伪代码来解释我想要做什么。起初我以为我可以这样做:

SELECT C.first_name + ' ' + C.last_name as [Client Name]
FROM dbo.agent as A INNER JOIN
dbo.contact as C ON C.agent_id = A.id
WHERE (A.id IN (@RepList))

在本例中,@RepList 是从 iOS 应用程序传递到 Web 服务的字符串,其中包含在应用程序中选择的所有 ID。正如我所研究的那样,我在 WHERE IN 语句中不能有变量,但我已经读过,如果我用变量创建一个临时表,那么我可以像这样引用它:

CREATE TABLE #TempTable (TempID VARCHAR(MAX))
INSERT INTO #TempTable (TempID)
VALUES (@RepList)

SELECT C.first_name + ' ' + C.last_name AS [Client Name]
FROM dbo.agent AS A INNER JOIN
                    dbo.contact AS C ON A.id = C.agent_id
WHERE (A.id IN (SELECT #TempTable.* FROM #TempTable))

同样,@RepList 将是从 iOS 应用程序传递到将运行此查询的 Web 服务的 ID 列表。这就是我卡住的地方,因为我似乎无法弄清楚如何将值列表作为变量传递到 TempTable 中。这最终可能只是 Visual Studio 中的一个问题(因为我遇到了 SQL 查询设计器的问题并且它不接受最终在 WebService 中工作的某些东西)但我想确保这是正确的做事格式所以在前进之前。最后,WebService 需要能够根据人们想要查看的代理数量返回一个客户端列表(范围可以从 1 个代理到 20 个代理)。

【问题讨论】:

  • 您实际上想用这个特定的查询来完成什么?你在哪个平台?您的数据库中有什么,它的结构如何?到目前为止,您尝试过的示例代码是什么?
  • 添加了一些额外的信息,希望能阐明我想要做什么。
  • 向我们展示您已经拥有的 WebService 代码。

标签: sql sql-server sql-server-2008 select create-table


【解决方案1】:

由于您使用的是 SQL Server 2008 和 VS2010,因此最好的解决方案可能是使用表值参数。此链接 (here) 描述了如何从 .Net 客户端使用它们。

基本思想是,您的 Web 服务代码将调用 SQL Server 上的过程、函数或参数化查询,其中一个参数是值表。然后 SQL 代码将使用该表值参数作为其源匹配表,而不是临时表。

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 2021-08-06
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多