【发布时间】:2011-08-16 07:31:59
【问题描述】:
我刚刚在我的工作站上设置了 SQL Server 2008 SP2 来运行本地版本的数据库。生产数据库是 SQL Server 2008 R2。一位同事正在他的工作站上运行 SQL Server 2005。
我的数据库使用以下代码引发错误,而其他服务器上同一数据库的其他实例运行此查询时没有错误。
WITH Posts AS (
SELECT TOP 10 *
FROM TBL_MSG_LATEST (NOLOCK)
WHERE TBL_MSG_LATEST.STATUS = 1
)
SELECT * FROM Posts (NOLOCK)
...抛出此错误:
消息 215,第 16 级,状态 1,第 6 行 为不是函数的对象“帖子”提供的参数。如果参数旨在作为表提示,则需要 WITH 关键字。
在Posts 之后删除(NOLOCK) 让我的数据库很开心。
我不熟悉 SQL Server,所以我不完全了解 CTE,但我相信这里可能甚至不需要这个 NOLOCK。
但是,我们不乐意仅仅为了满足我的开发环境而对代码库进行更改。
我的新数据库环境有配置差异吗?是否有正当理由删除我无法从错误消息中破译的NOLOCK?
【问题讨论】:
-
如果没有很好的理由,NOLOCK 应该只用于报告等实例...否则您可能会读取未提交的数据...
标签: sql-server sql-server-2005 sql-server-2008 sql-server-2008-r2