2012-03-09 49 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;

做工精細,我