gpt4 book ai didi

sql-server - SQL Server 时态表的 SSDT 代码分析错误

转载 作者:行者123 更新时间:2023-12-03 14:34:01 26 4
gpt4 key购买 nike

我的 SQL Server 数据库项目中有许多时态表。今天,我将我的 SSDT 升级到最新版本,并且在构建项目时出现以下时态表错误。例如,我有一个时态表 UseCase,它有一个名为 UseCase_HISTORY 的历史表。

看起来像是代码分析问题。如果我在构建时禁用代码分析,则构建时不会出现错误。

我正在使用 VS2015 和 VS2017。两者都有相同的问题。

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(1292,5): Error:  SQL72039: The substring is out of the bounds for script MSSQL::dbo.UseCase_HISTORY.
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets(1292,5): Error: MSB4018: The "SqlStaticCodeAnalysisTask" task failed unexpectedly.
Microsoft.Data.Tools.Schema.SchemaModel.ScriptCacheException: The substring is out of the bounds for script MSSQL::dbo.UseCase_HISTORY.
at Microsoft.Data.Tools.Schema.SchemaModel.ScriptCache.CheckAndGetSubstring(String cacheIdentifier, Int32 startOffset, Int32 length, CachedString value)
at Microsoft.Data.Tools.Schema.SchemaModel.ScriptCache.GetScript(String cacheIdentifier, Int32 startOffset, Int32 length)
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSourceInformation.ParseSource()
at Microsoft.Data.Tools.Schema.Sql.SchemaModel.SqlSourceInformation.get_ScriptDom()
at Microsoft.SqlServer.Dac.Model.SqlSchemaModelObjectService.GetOriginalSourceFragment(TSqlObject tSqlObject)
at Microsoft.SqlServer.Dac.TSqlModelUtils.TryGetFragmentForAnalysis(TSqlObject tSqlObject, TSqlFragment& fragment)
at Microsoft.SqlServer.Dac.CodeAnalysis.SqlRuleExecutionContext.get_ScriptFragment()
at Microsoft.SqlServer.Dac.CodeAnalysis.Rules.Design.DataTypeCompatibilityRule.Analyze(SqlRuleExecutionContext context)
at Microsoft.SqlServer.Dac.CodeAnalysis.Engine.RuleEngine.TryExecuteSingleRule(RuleDescriptor ruleDescriptor, SqlRuleExecutionContext executionContext)
at Microsoft.SqlServer.Dac.CodeAnalysis.Engine.RuleEngine.ExecuteSingleRule(RuleDescriptor ruleDescriptor, SqlRuleExecutionContext executionContext, IList`1 errors)
at Microsoft.SqlServer.Dac.CodeAnalysis.Engine.RuleEngine.ExecuteRules(SqlRuleExecutionContext executionContext, IEnumerable`1 rules, IList`1 allErrors)
at Microsoft.SqlServer.Dac.CodeAnalysis.Engine.RuleEngine.ExecuteElementRules(TSqlModel schemaModel, List`1 allErrors, IEnumerable`1 modelElements, ISet`1 rules, List`1 allProblems)
at Microsoft.SqlServer.Dac.CodeAnalysis.Engine.RuleEngine.ExecuteElementRules(TSqlModel schemaModel, List`1 allErrors)
at Microsoft.SqlServer.Dac.CodeAnalysis.Engine.RuleEngine.ExecuteRules(TSqlModel schemaModel, IList`1& errors)
at Microsoft.SqlServer.Dac.CodeAnalysis.CodeAnalysisService.ExecuteProcessRulesStep()
at Microsoft.SqlServer.Dac.CodeAnalysis.CodeAnalysisService.ExecuteStep(Func`1 step)
at Microsoft.SqlServer.Dac.CodeAnalysis.CodeAnalysisService.Execute()
at Microsoft.SqlServer.Dac.CodeAnalysis.CodeAnalysisService.Analyze(TSqlModel model)
at Microsoft.Data.Tools.Schema.Tasks.Sql.SqlStaticCodeAnalysisTask.ExecuteProcessRulesStep()
at Microsoft.Data.Tools.Schema.Tasks.Sql.SqlStaticCodeAnalysisTask.ExecuteStep(Func`1 step)
at Microsoft.Data.Tools.Schema.Tasks.Sql.SqlStaticCodeAnalysisTask.Execute()
at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
at Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext()

最佳答案

在我将 SSMS/SSDT/DACFX 同时升级到 17.3 版后,我遇到了与您相同的错误(一次完成所有操作是愚蠢的举动)。在我的情况下,我至少已经将这个问题缩小了一吨。

我无法在新项目中完全复制此问题,但它似乎与代码分析设置中的 SR0014 选项直接相关。一旦我关闭该特定选项,一切又开始工作。

enter image description here

我认为您可能已经发现了问题的一部分,临时表/历史表,因为我也广泛使用它们。基于抛出硬错误的特定规则,我们的设计中可能还有另一个共性。您是否还在抛出错误的同一个表上使用用户定义的数据类型?为了一致性和下游使用,我基本上为所有数据类型设置了别名。

我目前的预感是此错误与多个时态表和用户定义的数据类型的组合有关。您能否确认您是否也在使用这些,以及是否取消选中 SR0014 允许您构建您的项目?作为旁注,我的目标是兼容级别为 140 的 Azure SQL 数据库。

如果是这种情况,可能只有极少数用户受到影响,我们需要实际报告这一问题。

关于sql-server - SQL Server 时态表的 SSDT 代码分析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com