2010-06-03 87 views
1

我有以下TSQL語句:如何將多個值存儲在TSQL變量

SELECT ProductId, OwnerId FROM Product 

我怎麼能存儲產品編號和OWNERID在TSQL變量,然後將其返回給調用的應用程序?

+4

您打算從查詢得到的多條記錄。如果您只需要一條記錄,則應該使用WHERE子句。爲什麼你想要返回值作爲變量而不是結果集? – DOK 2010-06-03 19:53:42

回答

2

通常通過執行查詢並在應用程序中使用任何適當的框架評估結果來完成此類事情(例如,在.NET中,您可以使用許多ORM工具之一,ADO.NET對象DataTableDbDataReader),而不是將它們作爲變量返回。首先,將值作爲變量返回將意味着只會從一行獲取值,而不管結果集中有多少個值。

如果這真的是你想要(和需要)做的事情,那麼你必須找出一些方法將它們合併成一個值。通常類似於使用垂直條(|)並分隔字符串值然後將其分割回到客戶端工作。

3

您不能將其存儲到一個變量中 - 一個變量可以保存一個值。

但是你可以輕鬆地將其存儲到內存中的表 - 這樣的:

CREATE TABLE @Temporary(ProductID INT, OwnerID INT) 

INSERT INTO @Temporary(ProductID INT, OwnerID INT) 
    SELECT ProductId, OwnerId 
    FROM dbo.Product 

有了這個,你現在在存儲器中的表格,您可以像使用任何其他表 - 從中​​選擇,將它加入磁盤表格 - 無論你需要做什麼。您可以將其作爲結果集返回給調用應用程序 - 就像任何其他查詢結果一樣。

5

一般來說,不可以將多個值存儲在變量中,而不需要像分隔列表那樣的跳躍跳轉。在您的例子,假設該Product表有單排,你可以這樣做:

Declare @ProductId <datatype> 
Declare @OwnerId <datatype> 

Select @ProductId = ProductId 
    , @OwnerId = OwnerId 
From Product 

如果Product表中有多個行,這是不行的,你下一步需要做什麼很大程度上依賴關於你實際想要完成的事情。

2

如果你在加載這些值轉換爲可變絕對集:

DECLARE @foo varchar(256) 

SET ROWCOUNT 1; 
SELECT @foo = 
     CAST(ProductId AS varchar(100)) + '|' + CAST(OwnerId AS varchar(100) 
FROM Product 
WHERE ProductName = 'foo'