【问题标题】:Temp Table Column Name Sensitivity临时表列名敏感度
【发布时间】:2021-03-01 23:50:42
【问题描述】:

我的处境很棘手。最初我的数据库目录不区分大小写。我编写愉快的查询而不介意变量名的大写。一切都很好。在我的数据库迁移到不同的主机后,服务器实例级别的排序规则区分大小写。现在我的变量名需要拼写检查和大小写检查。

没关系,因为我很少使用变量。

最近出现了一种情况,在我的主查询中引用它们之前,我需要使用临时表来缓冲来自多个视图的一些结果。本质上:

SELECT * INTO #myview1 FROM vw_myview1
SELECT * INTO #myview2 FROM vw_myview2

SELECT * 
FROM #myview1 v1
JOIN #myview2 v2 on v1.id = v2.id

如果我的数据库实例具有不区分大小写的排序规则,一切都会好起来的。但不是。在我的主要查询中,我会将列名大写全部搞砸,WorkID,workId,workid,你来命名它。我有 50 多个这样的查询需要临时表解决方法。必须为引用新临时表中的列的每个实例修复大写字母是疯狂且容易出错的。无论如何我可以翻转开关并说忽略此临时表的列名排序规则吗?

【问题讨论】:

  • TL;博士不。事实上,即使您在不区分大小写的排序规则中编写,您仍然应该确保对象的大小写正确。如果您现在使用区分大小写的排序规则,则需要更改为不区分大小写的排序规则(在数据库级别)或修复查询。没有“解决方法”,因为这样排序规则就不会按设计工作。

标签: sql-server collation


【解决方案1】:

如果您必须确保临时表具有所需的列排序规则,有几种方法。它是 PITA,但还不错。对于 50 多张桌子,它仍然是 PITA。

在 SSMS 中,使用“工具”->“选项”对话框进入“SQL Server 对象资源管理器”。 “脚本”选项位于此处。将“包含排序规则”的选项设置为 true。然后编写表格或视图的脚本。将脚本从表转换为您需要的临时表语法。

您也可以“作弊”并使用同一数据库中的新表而不是临时表。由你来清理。如果它很大,它将在事务日志中。

我见过一些示例,其中插入使用子查询来获取来自源的列名,其中 1=2。这会导致包含排序规则。它只创建表。对我来说,这似乎很时髦,而且比编写脚本更乏味。

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多