如何解决Visual Studio SQL项目中自动生成时态表的IntelliSense报错问题
问题原因
该报错由Visual Studio SQL Server数据工具(SSDT)的语法解析规则触发:你定义的历史表名包含空格这类特殊字符,原建表语句中HISTORY_TABLE参数的对象名写法不符合SSDT的解析要求,解析到Types时无法识别它是带空格的表名的一部分,因此抛出语法错误。
解决方法
方法1:修正对象名的方括号包裹规则
将HISTORY_TABLE参数的架构名和表名全部用方括号包裹,修改原语句的最后一行即可:
原写法:
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.[Sale Types History]));
修正后写法:
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[Sale Types History]));
方法2:避免表名使用空格(更推荐)
直接将主表、历史表名中的空格替换为下划线,不需要处理特殊字符转义,后续查询编写也更便捷,完整语句参考:
CREATE TABLE [dbo].[Sale_Types] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Name] VARCHAR (MAX) NOT NULL, SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START NOT NULL, SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END NOT NULL, PERIOD FOR SYSTEM_TIME (SysStartTime,SysEndTime), CONSTRAINT [PK_Sale_Types] PRIMARY KEY CLUSTERED ([Id] ASC) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[Sale_Types_History]));
方法3:升级SSDT组件
如果使用的是旧版本Visual Studio,升级对应版本的SQL Server数据工具(SSDT)到最新版,也可以修复这类时态表特殊名称的解析缺陷。
内容的提问来源于stack exchange,提问作者Mandelbrotter
相关产品推荐
相关产品推荐

