Sql server 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
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
没有什么经验,但是当我连接到某个模式时,它只会在模式内部找到对象。这是正常的还是我应该做一些工作来设置前缀
感谢您的回答尽管bDbo是默认模式,但如果未指定模式,它将始终首先转到该模式。最好总是在查询中指定模式,尤其是在使用多个模式的情况下。这样就不会浪费时间先查找错误的模式
通过模式引用数据库对象总是一种好的做法
名称和对象名称,由句点(.)分隔
引用的对象没有显式架构名称。。。将通过首先搜索默认模式,然后搜索dbo模式来定位
来源:唯一明显的区别是(似乎有点随意)使用smalldatetime作为过程的输入参数。您选择此选项而不是datetime/datetime2的具体原因是什么?MS文档建议不再使用它:。不确定这对你的情况会有什么影响,但可能会有一些,因为这是代码中唯一可以观察到的差异。尝试在不转换数据的情况下传递数据:DECLARE@temp DATETIME='20161205'生成和修改的字段类型是什么?无法在Sql Server上复制2016@DenisRubashkin它们是smalldatetime
。不,不会。对不符合模式的对象的引用将首先在用户的默认模式中解析。如果没有找到,那么引擎将使用dbo。@SMor我想你可能是对的。但在我的例子中,我连接了测试模式,它从dbo
进行搜索。有没有办法找到用户的默认模式我想这就是url中提到的。像jdbc:sqlserver://{{url}}:{{{port}};databaseName=test
。