选择名为YEAR的列时发生SQL错误

选择名为YEAR的列时发生SQL错误,sql,sql-server,Sql,Sql Server,我试图从表中选择一个名为YEAR的列 我可以通过以下方法实现这一点: SELECT * FROM OPENQUERY (mybook, 'SELECT mytable.year FROM mytable') 但当我使用此选项时: SELECT * FROM OPENQUERY (mybook, 'SELECT year FROM mytable') 这是因为年份是某种保留字还是有其他原因?使用 SELECT [year] FROM mytable 使用 在SQL Server中,年份是保留

我试图从表中选择一个名为YEAR的列

我可以通过以下方法实现这一点:

SELECT * FROM OPENQUERY (mybook, 'SELECT mytable.year FROM mytable')
但当我使用此选项时:

SELECT * FROM OPENQUERY (mybook, 'SELECT year FROM mytable')
这是因为年份是某种保留字还是有其他原因?

使用

SELECT [year] FROM mytable
使用

在SQL Server中,年份是保留字。所以当你尝试使用它时,它会抱怨

如果您使用的是MySql,您可以在一年左右使用back ticks

在SQL Server中,您可以在年左右使用[]

编辑

在看到更新的问题后,以下SQL应该可以工作:

从OPENQUERY mybook中选择*,“从mytable中选择[year]”

在SQL Server中,year是一个保留字。所以当你尝试使用它时,它会抱怨

如果您使用的是MySql,您可以在一年左右使用back ticks

在SQL Server中,您可以在年左右使用[]

编辑

在看到更新的问题后,以下SQL应该可以工作:

从OPENQUERY mybook中选择*,“从mytable中选择[year]”

在字段名周围使用括号


在字段名周围使用括号

我认为您的理由是正确的,但您的解决方案不起作用。。。我已经更新了查询,以显示它实际上是如何与OPENQUERY一起使用的…@Tom-您需要使用DB name/schema format Database.dbo.table或使用SQL Server name字符(即方括号[]来限定字段的大小,这是投票最多的??这是一个谎言。SQL Server在没有报价的情况下从未停滞不前。它是保留的,但不受保护。我刚刚用OPENQUERY进行了验证,它与MyTable中的select year一样有效。我认为您的理由是正确的,但您的解决方案不起作用。。。我已经更新了查询,以显示它实际上是如何与OPENQUERY一起使用的…@Tom-您需要使用DB name/schema format Database.dbo.table或使用SQL Server name字符(即方括号[]来限定字段的大小,这是投票最多的??这是一个谎言。SQL Server在没有报价的情况下从未停滞不前。它是保留的,但不受保护。我刚刚用OPENQUERY进行了验证,它与MyTable中的select year一样工作,涉及到两台服务器。很明显,您正在从SQL Server运行哪个版本?-我们还需要知道mybook指向数据库系统的位置&version有两台服务器。很明显,您正在从SQL Server运行哪个版本?-我们还需要知道mybook指向数据库系统和版本的位置
SELECT [year] FROM mytable