我正在运行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,因此不会出现问题。您能想到可能导致此行为的任何其他设置吗?
答案 0 :(得分:13)
此类问题的可能原因是您从其他源导入了可能正在运行旧版SQL Server的数据库。无论如何,你有办法摆脱它。请按照以下步骤操作:
以下是“属性”窗口的屏幕截图供您参考。
答案 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;')