我是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}}表。
概要
dbo
的表。ARTIST
架构。我对dbo
没什么经验,但是当我连接到某个模式时,它只能在模式中找到对象。这是正常的还是我应该做一些工作来设置前缀?
感谢b
的答案答案 0 :(得分:1)
通过架构引用数据库对象始终是一种好习惯 名称和对象名称,以句点(。)分隔。
在没有显式模式名称的情况下引用的对象将通过首先搜索默认模式,然后是dbo模式来定位
来源:SQL Server Best Practices – Implementation of Database Object Schemas
答案 1 :(得分:0)
Dbo是默认架构,如果未指定架构,它将始终首先转到该架构。最好始终在查询中指定模式,尤其是在使用多个模式时。这样就不会浪费时间先查看错误的架构。