选择名称为保留SQL关键字的列

时间:2012-03-09 11:40:11

标签: sql sql-server

考虑下表“sample_table”

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

无论如何我可以选择第三列而不使用其名称desc

尝试select desc from mytable会抛出错误

请建议。

谢谢,

巴兰

5 个答案:

答案 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