2014-12-04 116 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該主題的深入講解和實例。

相關問題