【问题标题】:Stored Procedure and SELECT statement return different results存储过程和 SELECT 语句返回不同的结果
【发布时间】:2014-12-04 16:47:49
【问题描述】:

我在 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 行。为什么?

【问题讨论】:

  • 数据库/模式上下文?您的所有对象名称都不合格。
  • 戴夫,就是这样!我们有一个 mobile.Employee 表和一个 dbo.Employee 表。请输入答案,我会支持你。非常感谢。我们三个人都在盯着它看,但我们没有看到。

标签: sql sql-server tsql stored-procedures


【解决方案1】:

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

这样

SELECT col1 FROM dbname.schemaname.tablename

不是这个

SELECT col1 FROM tablename

查看此blog post by Aaron Bertrand,了解有关该主题的深入解释和示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多