Sql server SQL Server存储过程返回不同的查询结果

Sql server SQL Server存储过程返回不同的查询结果,sql-server,stored-procedures,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

我是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;
然而,当我不使用过程执行查询时,它返回大约5000行

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

SELECT *
FROM ARTIST
WHERE GENERATED > @temp OR MODIFIED > @temp;
我只是不明白为什么这两个结果不同

谢谢你的解释

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

我发现了问题所在。谢谢

我正在使用
test
schema。 因此,我连接到
测试
。但是,当我使用
SELECT*FROM ARTIST
时,它不会搜索
test.ARTIST
,而是搜索属于
dbo
ARTIST

总结

  • 这里的基本问题是我有两个名为
    ARTIST
    的表
  • 但是,我仍然不明白为什么它会自动查找
    dbo
    schema
我对
MYSQL
没有什么经验,但是当我连接到某个模式时,它只会在模式内部找到对象。这是正常的还是我应该做一些工作来设置前缀


感谢您的回答尽管b

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

通过模式引用数据库对象总是一种好的做法 名称和对象名称,由句点(.)分隔


引用的对象没有显式架构名称。。。将通过首先搜索默认模式,然后搜索dbo模式来定位



来源:

唯一明显的区别是(似乎有点随意)使用smalldatetime作为过程的输入参数。您选择此选项而不是datetime/datetime2的具体原因是什么?MS文档建议不再使用它:。不确定这对你的情况会有什么影响,但可能会有一些,因为这是代码中唯一可以观察到的差异。尝试在不转换数据的情况下传递数据:DECLARE@temp DATETIME='20161205'生成和修改的字段类型是什么?无法在Sql Server上复制2016@DenisRubashkin它们是
smalldatetime
。不,不会。对不符合模式的对象的引用将首先在用户的默认模式中解析。如果没有找到,那么引擎将使用dbo。@SMor我想你可能是对的。但在我的例子中,我连接了测试模式,它从
dbo
进行搜索。有没有办法找到用户的默认模式我想这就是url中提到的。像
jdbc:sqlserver://{{url}}:{{{port}};databaseName=test