有没有办法检查视图是否对列名和表名使用了正确的大小写?

Is there a way to check if a view is using the correct casing for column and table names?

提问人:JonathonMinard 提问时间:9/6/2023 最后编辑:Thom AJonathonMinard 更新时间:9/6/2023 访问量:52

问:

默认情况下,SQL Server 不区分大小写。如果您有一个名为“Test”的表,则可以使用如下查询从中加载数据:

SELECT *
FROM teST

但是,如果数据库/服务器的排序规则区分大小写,则此查询将失败。

我们有一个应用程序,它将各种视图和其他 SQL 对象安装到用户的 SQL Server 数据库中。其中许多视图目前不适用于区分大小写的数据库,因为它们对某些列和表名使用了不正确的大小写。我们正在考虑更新查询以使用正确的大小写,但由于 SQL 对象之间的依赖关系,这在新的区分大小写的数据库中被证明是乏味的。

可以加快这一速度的一件事是,如果给定一个不区分大小写的数据库,并且已经包含了我们所有的 SQL 对象,我们可以很容易地检测到使用不正确大小写的视图。无论如何都可以这样做吗?例如,在运行上述查询时,我们是否可以指定一个选项或查询提示或任何内容来获得表“teST”无效或大小写不正确的错误?

SQL-Server 排序规则

评论

2赞 siggemannen 9/6/2023
几点评论:1)避免在数据库级别使用区分大小写的排序规则,除非你真的想体验新的痛苦级别 2)你可以在测试服务器上创建一个具有区分大小写的排序规则的数据库,然后尝试在那里一个接一个地创建视图,如果视图创建失败,这意味着你必须修复它
1赞 Dan Guzman 9/6/2023
如果使用 Visual Studio SQL Server 数据库项目,则如果引用的名称因大小写而异,则生成将生成警告,即使在不区分大小写的排序规则中也是如此。
1赞 Aaron Bertrand 9/6/2023
我喜欢在开发和暂存环境中使用区分大小写的视图,因为这些视图永远无法以这种方式进入生产环境。您可以查看表名(并将它们与/使用二进制排序规则进行比较)和列名,但是如果您有,则很难使用该输出来弄清楚它。sys.sql_expression_dependenciessys.tablessys.schemassys.dm_exec_describe_first_result_set()SELECT x = t1.a, y = t2.a FROM dbo.t1 JOIN dbo.t2
0赞 JonathonMinard 9/8/2023
谢谢siggemannen。我想我们可能不得不做一些像你建议的事情。

答:

-2赞 Luis LL 9/6/2023 #1

你可以试试 sys.sql_dependencies

select * 
from sys.views
where object_id not in (select object_id from sys.sql_dependencies)