我有以下TSQL声明:
SELECT ProductId, OwnerId FROM Product
如何将ProductId和OwnerId存储在TSQL变量中,然后将其返回给调用应用程序?
答案 0 :(得分:5)
一般情况下,如果没有像分隔列表那样的跳跃跳跃,你不能在变量中存储多个值。在您的示例中,假设Product
表有一行,您可以执行以下操作:
Declare @ProductId <datatype>
Declare @OwnerId <datatype>
Select @ProductId = ProductId
, @OwnerId = OwnerId
From Product
如果Product
表有多行,这将不起作用,接下来你需要做什么在很大程度上取决于你实际想要完成的事情。
答案 1 :(得分:3)
您无法将其存储到单个变量中 - 一个变量可以包含一个值。
但您可以轻松地将其存储到内存表中 - 例如:
CREATE TABLE @Temporary(ProductID INT, OwnerID INT)
INSERT INTO @Temporary(ProductID INT, OwnerID INT)
SELECT ProductId, OwnerId
FROM dbo.Product
有了这个,你现在在内存中有一个表,你可以像任何其他表一样使用它 - 从中选择,将它连接到磁盘表 - 无论你需要做什么。您可以将其作为结果集返回到调用应用程序 - 就像任何其他查询结果一样。
答案 2 :(得分:2)
这种事情通常是通过执行查询并使用适当的任何框架评估应用程序中的结果来完成的(例如,在.NET中,您要么使用众多ORM工具之一,{{1}像ADO.NET
或DataTable
)之类的对象,而不是将它们作为变量返回。首先,将值作为变量返回意味着您只能从一行获取值,而不管结果集中有多少。
如果这真的是你想要(和需要)做的事情,那么你必须想出一些方法将它们组合成一个值。通常使用竖线(DbDataReader
)并分离字符串值,然后在客户端将其拆分回来。
答案 3 :(得分: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'