存储过程和SELECT语句返回不同的结果

时间:2014-12-04 16:47:50

标签: sql sql-server tsql stored-procedures

我在SQL Server 2008数据库上有一个存储过程。存储过程非常简单,只是一个SELECT语句。当我运行它时,它返回422行。但是,当我从存储过程运行SELECT语句时,它返回467行。我通过在同一SSMS窗口中同时运行存储过程和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行。为什么呢?

1 个答案:

答案 0 :(得分:4)

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

喜欢这个

SELECT col1 FROM dbname.schemaname.tablename

不是这个

SELECT col1 FROM tablename

查看此blog post by Aaron Bertrand以获取有关此主题的深入说明和示例。