【问题标题】:SQL Column exists but not visible and can't selectSQL 列存在但不可见且无法选择
【发布时间】:2021-06-07 03:38:50
【问题描述】:

SQL Server 中现有和不存在的列。

我目前使用的是 SQL Server 2017,并且在表“tblReport”中有一个列“EnableStartEndTimes”。当试图对表中的列进行选择时,它说它不存在。

但是当试图将列添加到表中时,它说它确实存在。通过我的 C# 代码,该列不存在。

在同一个查询窗口(选择单一数据库)内连续运行以下两个查询:

从 tblReport 中选择 EnableStartEndTimes alter table tblReport 添加 EnableStartEndTimes bit null

给出以下结果:

消息 207,级别 16,状态 1,第 8 行无效的列名 'EnableStartEndTimes'。

完成时间:2021-03-10T09:33:47.0011192+02:00

Msg 2705, Level 16, State 6, Line 9 每个表中的列名必须是 独特。表 'tblReport' 中的列名 'EnableStartEndTimes' 是 多次指定。

完成时间:2021-03-10T09:33:56.6904942+02:00

跑步:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'tblReport'
AND COLUMN_NAME = 'EnableStartEndTimes'

不返回任何结果。

也没有:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE  COLUMN_NAME = 'EnableStartEndTimes'

在设计器中也没有 EnableStartEndTimes,大写或小写可见。

注意几点:

  • 查询在同一个查询窗口中运行。因此,相同的数据库仍然被选中。
  • 打开和关闭 SQL 没有区别。
  • 该列在表格设计视图中也不可见。
  • 上部已被删除,结果没有区别。

所以我的假设是系统表中某处存在对列的引用(之前可能创建不正确?)。我无法在任何地方找到对“EnableStartEndTimes”的任何引用?

【问题讨论】:

  • 但是当试图将列添加到表中时。你是如何做到这一点的?
  • 如果您启用了区分大小写,您的查询where upper(TABLE_NAME) = 'tblReport'... 将不会返回任何内容...upper 将所有内容都转换为大写...
  • 请不要将图像用于代码、数据或错误 - 与直接格式化的文本相比,它很难阅读。
  • 两件事,确保您在所有情况下都使用完全相同的数据库......这个问题被问了很多,而且很多时候连接到不同的服务器或不同的数据库。还要确保在所有情况下都使用相同的默认架构。它绝对是这样的……列不会神奇地出现/消失。
  • 刷新智能感知?编辑 -> 智能感知 -> 刷新

标签: sql-server database-design database-schema


【解决方案1】:

尝试运行以下命令并检查架构之间的任何冲突或其他重复。

select Schema_Name(t.schema_id) Schema, t.[name]
from sys.columns c join sys.tables t on t.object_id=c.object_id
where c.name='EnableStartEndTimes'

【讨论】:

  • 运行上面的代码没有返回名为 EnableStartEndTimes 的列的记录?这是问题的一部分。
  • 你最近运行过 dbcc checkdb 吗?可能值得检查是否有任何损坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-25
相关资源
最近更新 更多