101

我正在修改现有的 SQL Server 存储过程。我在表中添加了两个新列,并修改了存储过程以选择这两个列。尽管表中的列可用,但我不断收到此错误:

列名“INCL_GSTAMOUNT”无效

在此处输入图像描述

谁能告诉我这里有什么问题?

4

18 回答 18

281

每当这种情况发生在我身上时,我都会按Ctrl++刷新,关闭查询窗口(必要时保存),然后开始一个通常运行良好的新会话ShiftRintellisense

于 2013-09-22T08:05:21.847 回答
94

如果将字符串放在双引号而不是单引号中,也会发生这种情况。

于 2014-03-07T03:30:25.560 回答
5

如果您要更改表列并立即更新表,包括同一脚本中的新列。确保GO在 alter table 的代码行之后使用命令,如下所示。

ALTER TABLE Location 
ADD TransitionType SMALLINT NULL
GO   

UPDATE Location SET TransitionType =  4

ALTER TABLE Location 
    ALTER COLUMN TransitionType SMALLINT NOT NULL
于 2020-10-29T06:50:40.767 回答
4

此错误也可能发生在封装的 SQL 语句中,例如

DECLARE @tableName nvarchar(20) SET @tableName = 'GROC'

声明 @updtStmt nvarchar(4000)

SET @updtStmt = '更新 tbProductMaster_' +@tableName +' SET department_str = ' + @tableName exec sp_executesql @updtStmt

才发现缺少引号来封装参数“@tableName”,如下所示:

SET @updtStmt = '更新 tbProductMaster_' +@tableName +' SET department_str = ''' + @tableName + ''' '

谢谢

于 2016-03-09T09:22:22.187 回答
2

Intellisense 不会自动刷新,您不应完全依赖它

于 2013-09-22T08:03:04.410 回答
2

我刚试过。如果您执行该语句来生成本地表,该工具将接受该列名存在。只需在编辑器窗口中标记表生成语句,然后单击执行。

于 2017-02-07T07:09:31.497 回答
2

我来到这里是因为我遇到了这个错误。原因是我在为 WHERE 条件赋值时使用了双引号 (") 而不是单引号 (')。为将来的我写这个。

于 2021-10-11T19:13:11.920 回答
1

创建视图时我遇到了同样的错误。

想象一下执行没有问题的选择查询:

select id
from products

尝试从同一查询创建视图会产生错误:

create view app.foobar as
select id
from products

消息 207,级别 16,状态 1,过程 foobar,第 2 行
无效的列名称“id”。

对我来说,这是一个范围界定问题。请注意,视图是在不同的架构中创建的。指定表的架构products解决了这个问题。即.. 使用dbo.products而不仅仅是products.

于 2016-04-14T03:46:38.613 回答
1

以下程序帮助我解决了这个问题,但我不知道为什么。

  1. 剪切消息中的行给出的有问题的代码
  2. 保存查询(例如到文件)
  3. 将代码粘贴到之前的位置
  4. 再次保存查询

即使它看起来是同一个查询执行它也没有抛出这个错误

于 2018-01-23T09:50:41.570 回答
1
There can be many things:
First attempt, make a select of this field in its source table;
Check the instance of the sql script window, you may be in a different instance;
Check if your join is correct;
Verify query ambiguity, maybe you are making a wrong table reference
Of these checks, run the T-sql script again

[Image of the script SQL][1]
  [1]: https://i.stack.imgur.com/r59ZY.png`enter code here
于 2018-12-19T11:12:29.227 回答
0

刷新表或关闭并打开 sql server 这项工作

于 2013-09-22T09:41:41.363 回答
0

我有一个类似的问题。

问题是表上有一个触发器,可以将更改写入审计日志表。审计日志表中缺少列。

于 2017-08-16T15:25:24.460 回答
0
  • 刷新你的表。
  • 重新启动 SQL 服务器。
  • 注意 Query 中的拼写错误。
于 2019-06-18T08:31:13.767 回答
0

我注意到,在执行联接时,MSSQL如果您要加入的表不在您要加入的表旁边,则会抛出“无效的列名”。我尝试指定table1.row1and table3.row3,但仍然收到错误;直到我重新排序查询中的表,它才消失。显然,语句中表格的顺序很重要。

+-------------+    +-------------+    +-------------+    
| table1      |    | table2      |    | table3      |    
+-------------+    +-------------+    +-------------+    
| row1 | col1 |    | row2 | col2 |    | row3 | col3 |    
+------+------+    +------+------+    +------+------+    
| ...  | ...  |    | ...  | ...  |    | ...  | ...  |    
+------+------+    +------+------+    +------+------+    

SELECT * FROM table1, table2 LEFT JOIN table3 ON row1 = row3; --throws an error
SELECT * FROM table2, table1 LEFT JOIN table3 ON row1 = row3; --works as expected
于 2019-10-25T20:19:02.823 回答
0

没有足够的代表发表评论,所以我会写一个新的答案,re: Nick Reed's answer about the order of the tables in the query

JOIN操作有两个操作数。在该ON子句中,只能引用这些操作数中的列。在尼克的第一个例子中,

SELECT * FROM table1, table2 LEFT JOIN table3 ON row1 = row3; --throws an error

table2table3是 的操作数JOIN,但ON子句指的是row1,在 中定义table1。因此错误。

于 2021-04-07T14:03:34.533 回答
0

如果将整数值存储在varchar列中,则会发生该错误。

从 php 插入$item1用于'$item1'将变量 int 转换为字符串

于 2021-08-24T08:31:29.827 回答
0

重置 IntelliSense 就可以完成这项工作。

魔法命令:CTRL + SHIFT + R

享受!!!

于 2022-02-04T20:45:19.163 回答
0

从代码(C#)端运行查询时,我遇到了类似的问题。表中导致上述错误的列已经添加了“默认值或绑定”(当我检查表的设计时)。所以我只是删除了该列及其对应的值作为查询插入的数据

于 2022-02-08T08:44:43.697 回答