2012-03-09 36 views
0

考虑如下表“sample_table”选择它的名称是保留SQL关键字

id name desc 
------------------------- 
1  kkt kkt description 
1  skt skt description 

反正是有不使用它的名字desc我可以选择第三列的列?

试图select desc from mytable抛出一个错误

请建议。

感谢,

巴兰

+2

**电话**,你不能用数字索引访问SQL Server列....你不应该,或者 - 列的关系表的顺序是**毫无意义的**,你不应该写任何依赖于该代码的代码 – 2012-03-09 11:43:07

+5

不是没有动态SQL,如果你能这样做,它会是一个非常糟糕的主意。当某人更改表格中列的顺序时会发生什么。 – Jamiec 2012-03-09 11:44:12

+0

好的..我不会使用这种方法..谢谢提及.. – balanv 2012-03-09 11:45:12

回答

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 

使用[]围绕与保留字列名。

+0

因为在我的客户端数据库中他们使用了一个名为“desc”的字段来描述..但是当我使用'select desc from mytable'时抛出一个错误..那就是为什么我试图通过索引访问列.. – balanv 2012-03-09 11:51:25

+6

@balanv - 你应该使用'[]'列名是保留字。更新了答案。 – 2012-03-09 11:53:20

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

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 
3

在保留字的列名周围使用标准的SQL引用标识符,例如

SELECT "desc" FROM sample_table; 
+0

'\'desc''工作,但''desc''不适合我。你可以补充你的答案。 – 2017-02-22 21:30:52

+0

@VikasGautam:你不是标准SQL。 MySQL的? – onedaywhen 2017-04-01 13:57:48

0

从mytable中选择mytable.desc;

做工精细,我

相关问题