2012-08-15 34 views
-1

創建SQL表我有我的工作這個小項目,我得到了我想要做一些具體的事情,但似乎無法找出一個可行的解決方案的一部分。基本上我在Visual Studio中創建了一個用於移動應用程序的Web服務,我們希望添加一個新的功能,允許從多個用戶檢索客戶端。要做到這一點,我需要能值數組傳遞到WHERE IN子句,這是我一直在尋找出幾乎是不可能的,但是其他的解決方案,我讀過(有過程沒有真實的例子)是創建一個Array值的表,然後創建一個WHERE IN(SELECT * from TEMPTABLE)類型的場景。從隨機陣的WebService

所以這就是我卡住的地方,我該如何去傳遞一個值的數組到我的SQL語句,然後創建這些值的臨時表(可以從1到30個值),然後我可以針對這些值運行其他查詢。大多數我見過有臨時表很難用數值編碼的例子,但我需要能夠傳遞值的隨機量爲表,所以如果它更容易將它們作爲一個單一的字符串用逗號是罰款或如果他們需要以特定的格式傳遞,我可以在調用Web服務之前在iOS端執行此操作,但我似乎無法弄清楚如何執行此動態類型的表以轉到下一部分。

編輯(添加基於註釋的一些信息)

所以系統和用途的一些背景信息,以幫助更好地理解我在做什麼。數據庫是一個SQL Server(2008),已經存在表和數據,因爲我正在處理的是現有Web應用程序的移動應用程序端口。我可以使用兩個表格,例如代理表格(針對員工)和客戶表格(針對其客戶),因此在某些情況下,我們有團隊可以查看彼此的客戶。因此,一般來說,如果我想從一組代理拉客戶的名單我會用其中的語句,但對於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應用傳遞到所有包含選擇的應用程序內的ID的Web服務的字符串。正如我看着這個,我不能在聲明中其中A變量,但我讀過,如果我創建一個臨時表與變量然後我可以像這樣引用它:

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個代理)來返回客戶列表。

+0

你真的想用這個特定的查詢來完成什麼?你在哪個平臺上?你的數據庫中有什麼,它是如何構成的?什麼是你迄今爲止嘗試過的一些示例代碼? – dan1111 2012-08-15 14:22:53

+0

增加了一些額外的信息,希望澄清我想要做的事情。 – 2012-08-15 17:03:03

+0

向我們展示您已擁有的WebService代碼。 – RBarryYoung 2012-08-15 17:34:17

回答

0

既然你是SQL Server 2008和Visual Studio 2010上,可能是最好的解決辦法是使用一個表值參數。此鏈接(here)描述瞭如何從.Net客戶端使用它們。

其基本思想是,您的web服務代碼將調用SQL Server上的過程,函數或參數化查詢,其中一個參數是值表。然後SQL代碼將使用該表值參數作爲其源匹配表而不是臨時表。