直接引用列值而不使用T-SQL中的变量

时间:2009-11-18 13:01:46

标签: sql-server-2005 tsql

在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 个答案:

答案 0 :(得分:2)

您可以创建一个表变量并选择整个结果集:

DECLARE  @tt TABLE (col1 INT, col2 INT)

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

,但除了SELECT查询之外,您无法访问其数据。

使用纯TSQL(没有自定义数据类型),你提出的问题是不可能的。

答案 1 :(得分:1)

听起来你是一名程序员......看看linq可能就像你想做的那样。

答案 2 :(得分:1)

您可以使用临时表和SELECT ... INTO来避免在开头指定列名:

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

但是当然在引用列名时你仍然需要FROM #TempTable部分。

SELECT Field1, Field2
FROM #TempTable

当然要记得最后放下桌子:

DROP #TempTable

应用程序代码通常一次引用一行作为变量。

答案 3 :(得分:1)

您可以使用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

答案 4 :(得分:0)

埋在Transact SQL documentation我遇到了对变量的限制:

  

变量只能在表达式中使用,而不能代替对象名称或关键字。

由于您需要使用对象名来限定列,我不相信这是允许的。