2010-06-03 51 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'