我正在修改现有的 SQL Server 存储过程。我在表中添加了两个新列,并修改了存储过程以选择这两个列。尽管表中的列可用,但我不断收到此错误:
列名“INCL_GSTAMOUNT”无效
谁能告诉我这里有什么问题?
我正在修改现有的 SQL Server 存储过程。我在表中添加了两个新列,并修改了存储过程以选择这两个列。尽管表中的列可用,但我不断收到此错误:
列名“INCL_GSTAMOUNT”无效
谁能告诉我这里有什么问题?
每当这种情况发生在我身上时,我都会按Ctrl++刷新,关闭查询窗口(必要时保存),然后开始一个通常运行良好的新会话Shift。Rintellisense
如果将字符串放在双引号而不是单引号中,也会发生这种情况。
如果您要更改表列并立即更新表,包括同一脚本中的新列。确保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
此错误也可能发生在封装的 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 + ''' '
谢谢
Intellisense 不会自动刷新,您不应完全依赖它
我刚试过。如果您执行该语句来生成本地表,该工具将接受该列名存在。只需在编辑器窗口中标记表生成语句,然后单击执行。
我来到这里是因为我遇到了这个错误。原因是我在为 WHERE 条件赋值时使用了双引号 (") 而不是单引号 (')。为将来的我写这个。
创建视图时我遇到了同样的错误。
想象一下执行没有问题的选择查询:
select id
from products
尝试从同一查询创建视图会产生错误:
create view app.foobar as
select id
from products
消息 207,级别 16,状态 1,过程 foobar,第 2 行
无效的列名称“id”。
对我来说,这是一个范围界定问题。请注意,视图是在不同的架构中创建的。指定表的架构products
解决了这个问题。即.. 使用dbo.products
而不仅仅是products
.
以下程序帮助我解决了这个问题,但我不知道为什么。
即使它看起来是同一个查询执行它也没有抛出这个错误
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
刷新表或关闭并打开 sql server 这项工作
我有一个类似的问题。
问题是表上有一个触发器,可以将更改写入审计日志表。审计日志表中缺少列。
我注意到,在执行联接时,MSSQL
如果您要加入的表不在您要加入的表旁边,则会抛出“无效的列名”。我尝试指定table1.row1
and 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
没有足够的代表发表评论,所以我会写一个新的答案,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
table2
和table3
是 的操作数JOIN
,但ON
子句指的是row1
,在 中定义table1
。因此错误。
如果将整数值存储在varchar
列中,则会发生该错误。
从 php 插入$item1
用于'$item1'
将变量 int 转换为字符串
重置 IntelliSense 就可以完成这项工作。
魔法命令:CTRL + SHIFT + R
享受!!!
从代码(C#)端运行查询时,我遇到了类似的问题。表中导致上述错误的列已经添加了“默认值或绑定”(当我检查表的设计时)。所以我只是删除了该列及其对应的值作为查询插入的数据