SQL Server存储过程与查询结果返回不同

时间:2017-09-27 12:18:13

标签: sql-server stored-procedures

我是SQL Server新手。我写了一个简单的存储过程,它返回带有数据条件的行。

这是我的代码:

CREATE PROCEDURE test.newArtists
    @LastUpdated smalldatetime
AS
BEGIN
    SELECT *
    FROM ARTIST
    WHERE GENERATED > @LastUpdated OR MODIFIED > @LastUpdated;
END

当我执行此存储过程时,它返回0行。喜欢......

DECLARE  @temp DATETIME;
SET @temp = CONVERT (DATETIME, '2016/12/05');

EXEC test.newArtists @LastUpdated = @temp;

但是,当我不使用过程执行查询时,它返回大约5,000行。

DECLARE  @temp DATETIME;
SET @temp = CONVERT (DATETIME, '2016/12/05');

SELECT *
FROM ARTIST
WHERE GENERATED > @temp OR MODIFIED > @temp;

我只是不明白这两个人会得到不同的结果。

感谢您的解释!

=============================================== ====

我发现了问题。感谢。

我正在使用test架构。 所以我连接到test。但是,当我使用SELECT * FROM ARTIST时,它不会搜索test.ARTIST,而会搜索属于ARTIST的{​​{1}}表。

概要

  • 这里的基本问题是我有2个名为dbo的表。
  • 但是,我仍然不明白为什么它会自动查找ARTIST架构。

我对dbo没什么经验,但是当我连接到某个模式时,它只能在模式中找到对象。这是正常的还是我应该做一些工作来设置前缀?

感谢b

的答案

2 个答案:

答案 0 :(得分:1)

  

通过架构引用数据库对象始终是一种好习惯   名称和对象名称,以句点(。)分隔。

  

在没有显式模式名称的情况下引用的对象将通过首先搜索默认模式,然后是dbo模式来定位

来源:SQL Server Best Practices – Implementation of Database Object Schemas

答案 1 :(得分:0)

Dbo是默认架构,如果未指定架构,它将始终首先转到该架构。最好始终在查询中指定模式,尤其是在使用多个模式时。这样就不会浪费时间先查看错误的架构。