考虑下表“sample_table”
id name desc
-------------------------
1 kkt kkt description
1 skt skt description
无论如何我可以选择第三列而不使用其名称desc
?
尝试select desc from mytable
会抛出错误
请建议。
谢谢,
巴兰
答案 0 :(得分:7)
我不明白为什么你需要这个,我会从不自己使用它。
declare @T table
(
id int,
name varchar(10),
description varchar(25)
)
insert into @T values
(1, 'kkt', 'kkt description'),
(1, 'skt', 'skt description')
select T2.N.value('*[3]', 'varchar(max)')
from (select *
from @T
for xml path('r'), type) as T1(X)
cross apply T1.X.nodes('/r') as T2(N)
<强>更新强>
你应该这样做。
select [desc]
from YourTable
在保留字的列名称周围使用[]
。
答案 1 :(得分:3)
在作为保留字的列名称周围使用标准SQL引用的标识符,例如
SELECT "desc" FROM sample_table;
答案 2 :(得分:1)
从mytable中选择mytable.desc;
为我工作
答案 3 :(得分:0)
这有用吗:
Declare @WhichOne int;
Declare @Sql varchar(200);
SET @WhichOne = 2;
WITH cte AS
(SELECT name, Row_Number() Over (ORDER BY column_id) AS rn
FROM sys.COLUMNS
WHERE Object_Name(object_id) = 'MyTable')
SELECT @Sql = 'Select ' + QuoteName(name) + ' From MyTable'
FROM cte
WHERE rn = @WhichOne;
Exec(@Sql);
来自http://www.daniweb.com/web-development/databases/ms-sql/threads/341388
答案 4 :(得分:0)
这样你就可以自己动手了,这就是你用动态sql做的方法:
DECLARE @sql NVARCHAR(MAX)
select
@sql = 'SELECT ' + COLUMN_NAME + ' FROM YourTable'
from INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='YourTable'
AND ORDINAL_POSITION=3
exec sp_executeSQL @sql