我在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行。为什么呢?
答案 0 :(得分:4)
这可能是由于没有限定您的对象名称造成的。如果对象不是完全限定的,则SQL将假定它们属于默认模式。
喜欢这个
SELECT col1 FROM dbname.schemaname.tablename
不是这个
SELECT col1 FROM tablename
查看此blog post by Aaron Bertrand以获取有关此主题的深入说明和示例。