Ссылка на значения столбцов напрямую без использования переменных в T-SQL - PullRequest
2 голосов
/ 18 ноября 2009

Есть ли способ в T-SQL (SQL Server 2005) назначить целую запись переменной записи и затем обратиться к конкретным значениям, используя имена столбцов?

Я имею в виду, вместо:

select @var1 = col1,
       @var2 = col2
from mytable
where ID = 1;

и ссылаясь на них как @var1 и @var2, что-то вроде

@record = 
select col1, col2
from mytable
where ID = 1;

и ссылаться на них как @record.col1 и @record.col2.

Я новичок в t-sql, так что, надеюсь, вопрос не слишком тривиален.

Ответы [ 5 ]

2 голосов
/ 18 ноября 2009

Вы можете создать переменную таблицы и выбрать в нее весь набор результатов:

DECLARE  @tt TABLE (col1 INT, col2 INT)

INSERT
INTO    @tt
SELECT  col1, col2
FROM    mytable
WHERE   id = 1

, но вы не можете получить доступ к его данным, кроме как в запросе SELECT.

С чистым TSQL (то есть без пользовательских типов данных) то, что вы просите, невозможно.

1 голос
/ 18 ноября 2009

Вы можете использовать XML, но вам придется поиграть с этим ...

DECLARE @MyRecord xml
DECLARE @Mytable TABLE (col1 int NOT NULL, col2 varchar(30) NOT NULL)

INSERT @Mytable (col1, col2) VALUES (1, 'bob')

select @MyRecord =
    (SELECT *
    from @Mytable
    where col1 = 1
    FOR XML AUTO)

SELECT @myRecord.value('./@col', 'int') --also @myRecord.value('@col', 'int')

--gives error

Msg 2390, Level 16, State 1, Line 12
XQuery [value()]: Top-level attribute nodes are not supported
1 голос
/ 18 ноября 2009

Вы можете использовать временную таблицу и SELECT ... INTO, чтобы избежать указания имен столбцов в начале:

SELECT Field1, Field2
INTO #TempTable
FROM MyTable
WHERE MyTable.MyID = 1

но, конечно, вам все равно понадобится часть FROM #TempTable при обращении к именам столбцов.

SELECT Field1, Field2
FROM #TempTable

и, конечно, не забудьте бросить стол в конце:

DROP #TempTable

Код приложения - это то место, где вы обычно ссылаетесь на одну строку за раз как переменную.

1 голос
/ 18 ноября 2009

звучит так, будто вы программист ... посмотрите на linq, возможно, так, как вы делаете.

0 голосов
/ 18 ноября 2009

Похоронен в документации Transact SQL Я столкнулся с этим ограничением на переменные:

Переменные можно использовать только в выражениях, а не вместо имен объектов или ключевых слов.

Так как вам нужно использовать имя объекта для определения столбца, я не верю, что это разрешено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...