Sql server 2005 在T-SQL中直接引用列值而不使用变量

Sql server 2005 在T-SQL中直接引用列值而不使用变量,sql-server-2005,tsql,Sql Server 2005,Tsql,在T-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

在T-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的初学者,希望这个问题不会太简单。

您可以创建一个表变量,并将整个结果集选择到其中:

DECLARE  @tt TABLE (col1 INT, col2 INT)

INSERT
INTO    @tt
SELECT  col1, col2
FROM    mytable
WHERE   id = 1
,但除了在SELECT查询中,您也无法访问其数据

使用纯TSQL,如果没有自定义数据类型,您所要求的是不可能的。

隐藏在

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


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

听起来您是一名程序员。。。查看linq可能是因为它做了您想要的事情。

您可以使用一个临时表并选择…INTO以避免在开始时指定列名:

SELECT Field1, Field2
INTO #TempTable
FROM MyTable
WHERE MyTable.MyID = 1
当然,在引用列名时,您仍然需要使用FROM-attreable部分

SELECT Field1, Field2
FROM #TempTable
当然要记住在最后放下桌子:

DROP #TempTable

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

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

听起来你是个程序员,这是到目前为止我在这里看到的最好的引语。我会一个接一个地去做作业。。谢谢你的提示。哈哈,好吧,说点傻话。。。但这是一个数据库问题;我认为这样的事情在像TSQL这样的语言中应该非常简单。又是一次失望。。我不明白为什么我必须定义N个变量才能引用表中的N列。无论如何谢谢你!你说的对,应用程序代码是你通常一次引用一行作为变量的地方。也许我应该考虑重新设计。SQL Server没有记录的概念——程序员说:-SQL Server和任何RDBMS都是严格的行和列。您可以选择列,可以限制行——这是关于它的。简短的回答:不,没有合成变量,除了T-SQL中的表变量,以及一些答案指出,表变量是从中选择的,就像表一样。@marc\s:Oracle的PL/SQL可以有记录类型的变量。