'PIVOT'附近的语法不正确

时间:2014-01-31 15:12:08

标签: sql tsql sql-server-2008-r2

我正在运行SQL Server 2008 R2。我正在尝试构建一个从表格中获取数据的表:

company | ded_id | descr

10          1      MEDINS
10          2      LIFE
10          3      PENSN
...
10         50      DOMREL

我需要构建一个临时表,格式如下:

company | DESC1 | DESC2 | DESC3 ... | DESC50
10        MEDINS  LIFE    PENSN       DOMREL

所以我构建了以下查询:

    SELECT *
    FROM (
    SELECT company,'DESC'+CAST(ded_id as VARCHAR(2)) AS DedID,descr
    FROM deduction     
    ) deds
    PIVOT (MAX(descr)FOR DedID IN([DESC1],[DESC2],[DESC3])) descs

因此运行此操作会出现以下错误:

  

Msg 325,Level 15,State 1,Line 6   'PIVOT'附近的语法不正确。您可能需要将当前数据库的兼容级别设置为更高的值才能启用此功能。请参阅ALTER DATABASE的SET COMPATIBILITY_LEVEL选项的帮助。

我仔细检查了数据库上的兼容级别,并且已经设置为100,因此不会出现问题。您能想到可能导致此行为的任何其他设置吗?

3 个答案:

答案 0 :(得分:13)

此类问题的可能原因是您从其他源导入了可能正在运行旧版SQL Server的数据库。无论如何,你有办法摆脱它。请按照以下步骤操作:

  1. 右键单击数据库(例如Northwind)。
  2. 点击'属性'。
  3. 点击左侧窗格中的'选项'选择一个页面'部分。
  4. 根据您的安装从兼容级别'的下拉列表中选择适当的数据库版本。在右边。
  5. 保存更改并立即尝试。
  6. 以下是“属性”窗口的屏幕截图供您参考。

    enter image description here

答案 1 :(得分:1)

我遇到了同样的错误('PIVOT'附近的语法不正确...... )并通过更改数据库属性的选项部分中的兼容性级别来解决它。

我还发现了如何编写兼容级别更改的脚本:

ALTER DATABASE database_name   
SET COMPATIBILITY_LEVEL = 100

(见https://msdn.microsoft.com/en-us/library/bb510680.aspx?f=255&MSPPError=-2147217396

答案 2 :(得分:0)

我在SQL查询中使用“数据透视”,“格式”和“转换”命令时遇到了同样的问题。

对我有用的一件事是 而不是导入sqlite 我进口了pyodbc 所以我的代码更改了

来自: import sqlite3 conn = sqlite3.connect('/Users/****/Desktop/****.sqlite')

至: import pyodbc conn = pyodbc.connect('Driver={SQL Server};''Server=@@@@;''Database=****;' 'Trusted_Connection=yes;')