【发布时间】: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