简体   繁体   English

普通SQL放入存储过程时出现奇怪的SQL错误。 错误:对象名称无效

[英]Strange SQL error when plain SQL put into stored procedure. Error: Invalid object name

I have a plain SQL query like this: 我有一个像这样的简单SQL查询:

SELECT        
   Users.userEmail AS registredEmail, 
   Status.statusName AS userActiveStatus, 
   Roles.roleName AS roleAssigned, 
   Users.userID AS uID
FROM
   Users 
INNER JOIN
   Status ON Users.userStatus = Status.statusID 
INNER JOIN
   Roles ON Users.userRole = Roles.roleID 
WHERE
   (Users.companyID = 'D77VD')

Since the where condition is a variable, put this SQL in a stored procedure like this: 由于where条件是一个变量,所以将此SQL放在一个存储过程中,如下所示:

CREATE PROCEDURE [usp_Users_12_CompanyUserGridview]
   @companyID varchar(20)
AS
   SELECT        
      Users.userEmail AS registredEmail, 
      Status.statusName AS userActiveStatus, 
      Roles.roleName AS roleAssigned, 
      Users.userID AS uID
   FROM            
      Users 
   INNER JOIN
      Status ON Users.userStatus = Status.statusID 
   INNER JOIN
      Roles ON Users.userRole = Roles.roleID
   WHERE 
      (Users.companyID = @companyID)

But strangely, the plain SQL with where value 'D77VD' runs just fine, but when I run this stored procedure and pass same value as parameter, it give me an error 但奇怪的是,普通的SQL与where值“D77VD”运行良好,但是当我运行此存储过程,并通过相同的值参数,它给我一个错误

Invalid object name 'Users' 无效的对象名称'用户'

One of these should resolve your problem. 其中一个应该可以解决您的问题。

1.Make sure that you have created the procedure in the same database (not in 'master' by mistake) 1.确保您已在同一数据库中创建过程(错误地不在'master'中)
2.Try adding schema name to table 'User' like 'dbo.User' instead of simple 'User' 2.尝试将模式名称添加到表'User',如'dbo.User',而不是简单的'User'

EX: EX:

CREATE PROCEDURE [usp_Users_12_CompanyUserGridview]
@companyID varchar(20)
AS
SELECT        dbo.Users.userEmail AS registredEmail, Status.statusName AS userActiveStatus, Roles.roleName AS roleAssigned, dbo.Users.userID AS uID
FROM            dbo.Users INNER JOIN
                         Status ON dbo.Users.userStatus = Status.statusID INNER JOIN
                         Roles ON dbo.Users.userRole = Roles.roleID
WHERE (dbo.Users.companyID = @companyID)

If your problem still not resolved, please let me know. 如果您的问题仍未解决,请告知我们。

@Suvendu Shekhar Giri -very nice catch! @Suvendu Shekhar Giri - 非常好!

@user1889838 it is very good practice use schema name for all the joining tables .... table named Status might give an error too if not use schema name. @ user1889838非常好的做法是为所有连接表使用模式名称....如果不使用模式名称,则表名为Status的表也可能出错。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM