SQL创建视图PercentPopulationVaccinated提示Select附近语法错误如何解决
问题原因排查
- 核心语法冲突:SQL Server 规定
CREATE VIEW语句必须是其所在执行批次的首个语句,且单个批次内不允许在视图创建逻辑后直接追加其他操作语句。你当前的代码将「创建视图」和「查询视图」两个逻辑放在同一个执行批次中,触发了语法校验错误。 - 潜在注意项:视图定义中不允许直接使用
ORDER BY子句,除非同时搭配TOP、OFFSET FETCH等限定返回行数的关键字,你当前已经注释了该语句,暂不会触发这类错误。
修复方案
在创建视图语句和查询视图语句之间添加 GO 关键字分隔执行批次即可,修正后代码如下:
Create view PercentPopulationVaccinated as Select dea.continent, dea.location, dea.date, dea.population, vac.new_vaccinations ,sum(convert(int,vac.new_vaccinations)) OVER (Partition by dea.location order by dea.location, dea.date) as rolling_people_vaccinated from PortfolioProject..['Covid vaccinations$'] vac Join PortfolioProject..['Covid deaths$'] dea On dea.location=vac.location and dea.date=vac.date where dea.continent is not null --order by 2,3 GO Select * from PercentPopulationVaccinated
GO是SQL Server专用的批次分隔符,不属于T-SQL标准语法,作用是告诉数据库客户端(如SSMS)将前后代码拆分为多个独立请求发送给数据库执行,避免批次内语句规则冲突。
如果需要支持重复执行脚本,可以在最开头加语句先删除已存在的视图:IF EXISTS (SELECT * FROM sys.views WHERE name = 'PercentPopulationVaccinated') DROP VIEW PercentPopulationVaccinated GO
内容的提问来源于stack exchange,提问作者Sandhya Anand
相关产品推荐
相关产品推荐

