2011-08-22 55 views
0

我有一个如下所述的存储过程。我正在使用SQL Server 2008 R2。当我从SQLCMD运行这个存储过程时,它正在工作并创建存储过程,但是当我从SSMS执行相同的过程时,它将失败,并显示下面的错误。当在SSMS上运行存储过程但在SQLCMD上运行存储过程时出现“列无效”错误

Msg 207,Level 16,State 1,Procedure TestProc,Line 5无效的列名'col1。

SET ANSI_NULLS ON GO 

SET QUOTED_IDENTIFIER OFF GO 

CREATE PROC [dbo].[TestProc] 
AS 
BEGIN 
SELECT t.col1 FROM table t /* But note that col1 is not in table t*/ 
END 
RETURN 

怎么能这个问题能解决吗?

+1

你确定两个版本都是针对相同的**数据库**运行吗? – JNK

+0

你有一个名为'表'的表吗?如果是这样,你应该使用[table]来代替。 – Johan

+1

如果您在不同用户的SSMS和SQLCMD下运行,请确保正确指定模式前缀。也许在列中有dbo.table,而没有列的some_other_schema.table ...总是对包含模式前缀有用。 –

回答

1

当您尝试在SQLCMD中创建存储过程时,该表是否可能在当时不存在?由于SQL  服务器的“延迟名称解析”功能,可以创建存储过程。

如果在您尝试创建存储过程时存在表DID但不存在列,那么无论您使用的是SQLCMD还是SSMS,都应该会看到您看到的错误。