在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的初学者,所以希望问题不是太微不足道。
答案 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)