У меня есть следующее TSQL заявление:Как хранить несколько значений в TSQL переменных
SELECT ProductId, OwnerId FROM Product
Как я могу хранить ProductId и OwnerId в переменной TSQL, а затем вернуть его к вызывающему приложению?
У меня есть следующее TSQL заявление:Как хранить несколько значений в TSQL переменных
SELECT ProductId, OwnerId FROM Product
Как я могу хранить ProductId и OwnerId в переменной TSQL, а затем вернуть его к вызывающему приложению?
Обычно это делается путем выполнения запроса и оценки результатов в приложении с использованием любой инфраструктуры (например, в .NET вы использовали либо один из многих инструментов ORM, а объекты ADO.NET
, например DataTable
, или DbDataReader
), а не путем их возврата в качестве переменной. Во-первых, возвращение значений в виде переменной означает, что вы получите только значения из одной строки, независимо от того, сколько из них находится в вашем результирующем наборе.
Если это действительно то, что вы хотите (и нужно), то вам придется выяснить, каким образом можно объединить их в одно значение. Обычно что-то похожее на использование вертикальной полосы (|
) и разделение значений строк, а затем их разделение на стороне клиента работает.
Вы не можете сохранить его в одной переменной - одна переменная может содержать одно значение.
Но вы можете легко хранить его в таблицу в памяти - что-то вроде:
CREATE TABLE @Temporary(ProductID INT, OwnerID INT)
INSERT INTO @Temporary(ProductID INT, OwnerID INT)
SELECT ProductId, OwnerId
FROM dbo.Product
С этим, вы имеете таблицу в памяти, которые вы можете использовать, как и любую другую таблицу - выбрать из него , присоедините его к таблицам на диске - что бы вы ни делали. Вы можете вернуть это вызывающее приложение в виде набора результатов, как и любой другой результат запроса.
В общем, нет, вы не можете хранить несколько значений в переменной без каких-либо перечеркнутых списков. В вашем примере, предполагая, что Product
таблица имеет одну строку, вы можете сделать что-то вроде:
Declare @ProductId <datatype>
Declare @OwnerId <datatype>
Select @ProductId = ProductId
, @OwnerId = OwnerId
From Product
Если Product
таблица имеет более одной строки, то это не будет работать, и то, что вам нужно делать дальше в значительной степени зависит о том, что вы на самом деле пытаетесь выполнить.
Если вы абсолютно набор на загрузки этих значений в переменную:
DECLARE @foo varchar(256)
SET ROWCOUNT 1;
SELECT @foo =
CAST(ProductId AS varchar(100)) + '|' + CAST(OwnerId AS varchar(100)
FROM Product
WHERE ProductName = 'foo'
Вы собираетесь получить несколько записей из вашего запроса. Если вам нужна только одна запись, вы должны использовать предложение WHERE. Почему вы хотите вернуть значения в качестве переменных вместо набора результатов? – DOK