La procédure stockée et l'instruction SELECT renvoient des résultats différents

J'ai une procédure stockée sur une database SQL Server 2008. La procédure stockée est très simple, juste une instruction SELECT. Quand je l'exécute, il renvoie 422 lignes. Toutefois, lorsque j'exécute l'instruction SELECT à partir de la procédure stockée, elle renvoie 467 lignes. J'ai essayé ceci en exécutant la procédure stockée et l'instruction SELECT dans la même window SSMS en même time, et le comportement est le même. La procédure stockée est:

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 

Lorsque je fais cela dans la même window 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 

Je reçois deux sets de résultats. Le premier est 422 lignes; le second est 467 lignes. Pourquoi?

Cela pourrait avoir été causé par ne pas qualifier vos noms d'object. Si les objects ne sont pas entièrement qualifiés, SQL supposera qu'ils relèvent du schéma par défaut.

Comme ça

 SELECT col1 FROM dbname.schemaname.tablename 

Pas ça

 SELECT col1 FROM tablename 

Jetez un œil à cet article de Aaron Bertrand pour une explication détaillée et un exemple de ce sujet.