2014-12-04 156 views
1

我在SQL Server 2008数据库上有一个存储过程。存储过程非常简单,只是一个SELECT语句。当我运行它时,它返回422行。但是,当我从存储过程运行SELECT语句时,它返回467行。我已经通过在同一个SSMS窗口中同时运行存储过程和SELECT语句来尝试这种方式,并且行为是相同的。存储过程是:存储过程和SELECT语句返回不同的结果

USE [REMS] 
GO 
/****** Object: StoredProcedure [mobile].[GetAllMobileDeviceUsers] Script Date: 12/04/2014 */ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
ALTER PROCEDURE [mobile].[GetAllMobileDeviceUsers] 
AS 
SET NOCOUNT ON 
SELECT 
ee.EmployeeID, 
EmployeeName = LastName + ', ' + FirstName 
FROM EmployeeInvData ee 
--UNION 
--SELECT 
--m.EmployeeID, 
--EmployeeName = LastName + ', ' + FirstName 
--FROM mobile.MiscPersonnel m 
INNER JOIN Employee e 
ON ee.EmployeeID = e.EmployeeID 
UNION 
SELECT 
'-1', 
'- Select An Employee -' 
ORDER BY EmployeeName 

当我这样做在同一个SSMS窗口:

exec mobile.GetAllMobileDeviceUsers 

SELECT 
ee.EmployeeID, 
EmployeeName = LastName + ', ' + FirstName 
FROM EmployeeInvData ee 
--UNION 
--SELECT 
--m.EmployeeID, 
--EmployeeName = LastName + ', ' + FirstName 
--FROM mobile.MiscPersonnel m 
INNER JOIN Employee e 
ON ee.EmployeeID = e.EmployeeID 
UNION 
SELECT 
'-1', 
'- Select An Employee -' 
ORDER BY EmployeeName 

我得到两个结果集。首先是422行;第二是467行。为什么?

+4

数据库/模式上下文?没有任何对象名称是合格的。 – 2014-12-04 16:54:56

+0

戴夫,就是这样!我们有一个mobile.Employee表和一个dbo.Employee表。请给出答案,我会upvote你。非常感谢。我们三个人正盯着这个,我们没有看到它。 – Melanie 2014-12-04 17:01:34

回答

4

这可能是由于不符合您的对象名称。如果对象不完全限定,SQL将假定它们属于默认模式。

像这样

SELECT col1 FROM dbname.schemaname.tablename 

不是这个

SELECT col1 FROM tablename 

退房这个blog post by Aaron Bertrand该主题的深入讲解和实例。

相关问题