考虑如下表“sample_table”选择它的名称是保留SQL关键字
id name desc
-------------------------
1 kkt kkt description
1 skt skt description
反正是有不使用它的名字desc
我可以选择第三列的列?
试图select desc from mytable
抛出一个错误
请建议。
感谢,
巴兰
考虑如下表“sample_table”选择它的名称是保留SQL关键字
id name desc
-------------------------
1 kkt kkt description
1 skt skt description
反正是有不使用它的名字desc
我可以选择第三列的列?
试图select desc from mytable
抛出一个错误
请建议。
感谢,
巴兰
我不明白你为什么需要这个,我会从来没有自己使用它。
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
使用[]
围绕与保留字列名。
因为在我的客户端数据库中他们使用了一个名为“desc”的字段来描述..但是当我使用'select desc from mytable'时抛出一个错误..那就是为什么我试图通过索引访问列.. – balanv 2012-03-09 11:51:25
@balanv - 你应该使用'[]'列名是保留字。更新了答案。 – 2012-03-09 11:53:20
这是否帮助:
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
只要你可以去搬起石头砸自己的脚,这里是你如何能有做到这一点动态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
在保留字的列名周围使用标准的SQL引用标识符,例如
SELECT "desc" FROM sample_table;
'\'desc''工作,但''desc''不适合我。你可以补充你的答案。 – 2017-02-22 21:30:52
@VikasGautam:你不是标准SQL。 MySQL的? – onedaywhen 2017-04-01 13:57:48
从mytable中选择mytable.desc;
做工精细,我
**电话**,你不能用数字索引访问SQL Server列....你不应该,或者 - 列的关系表的顺序是**毫无意义的**,你不应该写任何依赖于该代码的代码 – 2012-03-09 11:43:07
不是没有动态SQL,如果你能这样做,它会是一个非常糟糕的主意。当某人更改表格中列的顺序时会发生什么。 – Jamiec 2012-03-09 11:44:12
好的..我不会使用这种方法..谢谢提及.. – balanv 2012-03-09 11:45:12