Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择名称为保留SQL关键字的列_Sql_Sql Server - Fatal编程技术网

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

选择名称为保留SQL关键字的列,sql,sql-server,Sql,Sql Server,考虑下表“样本表” 我是否可以选择第三列而不使用其名称desc 尝试从mytable中选择描述将抛出错误 请建议 谢谢 巴兰这有帮助吗: 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

考虑下表“样本表”

我是否可以选择第三列而不使用其名称
desc

尝试从mytable中选择描述将抛出错误

请建议

谢谢

巴兰

这有帮助吗:

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);

这是否有帮助:

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);

中,为了让您可以射中自己的脚,下面介绍如何使用动态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

为了让您可以开枪打自己的脚,下面介绍如何使用dynamic 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

我不明白你为什么需要这个,我自己也不会使用它

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

在保留字的列名周围使用
[]

我不明白您为什么需要这个,我自己也不会使用它

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

在保留字的列名周围使用
[]

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

SELECT "desc" FROM sample_table;

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

SELECT "desc" FROM sample_table;

从mytable中选择mytable.desc


为我工作很好

从mytable中选择mytable.desc


对我来说很好

不,您无法通过数字索引访问SQL Server列。。。。您也不应该这样做——关系表中列的顺序是毫无意义的,您不应该编写任何依赖于此的代码——如果没有动态sql,那么这将是一个非常糟糕的主意。当有人更改表中列的顺序时会发生什么情况。确定。。我不会用这种方法。。谢谢你提到..@Jamiec-没有动力是可能的,但我同意这是个坏主意。这就是为什么你不尝试引导问题的解决方案。如果您将问题表述为“我的数据库使用保留字作为列,我如何选择它”,您将在大约一微秒内得到答案。不,您无法通过数字索引访问SQL Server列。。。。您也不应该这样做——关系表中列的顺序是毫无意义的,您不应该编写任何依赖于此的代码——如果没有动态sql,那么这将是一个非常糟糕的主意。当有人更改表中列的顺序时会发生什么情况。确定。。我不会用这种方法。。谢谢你提到..@Jamiec-没有动力是可能的,但我同意这是个坏主意。这就是为什么你不尝试引导问题的解决方案。如果您将问题表述为“我的数据库使用保留字作为列,我如何选择它”,您将在大约一微秒内得到答案。因为在我客户的数据库中,他们使用了一个名为“desc”的字段进行描述。。但是当我使用'select desc from mytable'时,它会抛出一个错误。。这就是我试图通过index..@balanv访问列的原因-您应该在保留字的列名周围使用
[]
。更新了答案。因为在我客户的数据库中,他们使用了一个名为“desc”的字段作为描述。。但是当我使用'select desc from mytable'时,它会抛出一个错误。。这就是我试图通过index..@balanv访问列的原因-您应该在保留字的列名周围使用
[]
。更新答案。
`desc`
有效,但
“desc”
对我无效。你可以在你的答案中添加一个“。@VikasGautam:你的答案不是标准的SQL。MySQL?
`desc`
可以工作,但是
“desc”
不适合我。你可以在你的答案中添加一个“。@VikasGautam:你的答案不是标准的SQL。MySQL?