2010-06-03 3 views
1

У меня есть следующее TSQL заявление:Как хранить несколько значений в TSQL переменных

SELECT ProductId, OwnerId FROM Product 

Как я могу хранить ProductId и OwnerId в переменной TSQL, а затем вернуть его к вызывающему приложению?

+4

Вы собираетесь получить несколько записей из вашего запроса. Если вам нужна только одна запись, вы должны использовать предложение WHERE. Почему вы хотите вернуть значения в качестве переменных вместо набора результатов? – DOK

ответ

2

Обычно это делается путем выполнения запроса и оценки результатов в приложении с использованием любой инфраструктуры (например, в .NET вы использовали либо один из многих инструментов ORM, а объекты ADO.NET, например DataTable, или DbDataReader), а не путем их возврата в качестве переменной. Во-первых, возвращение значений в виде переменной означает, что вы получите только значения из одной строки, независимо от того, сколько из них находится в вашем результирующем наборе.

Если это действительно то, что вы хотите (и нужно), то вам придется выяснить, каким образом можно объединить их в одно значение. Обычно что-то похожее на использование вертикальной полосы (|) и разделение значений строк, а затем их разделение на стороне клиента работает.

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' 
Смежные вопросы