1

这可能有一个明显的答案,但我的谷歌搜索没有提供和回答

为什么我不能执行查询,例如

Select * FROM OBJECT_ID

在这种情况下,我不是指使用函数 Object_ID('TableName'),而是指与 sys.Tables 中指定的表关联的实际 INT ID。

我刚刚通过 sys.Tables 遇到了我正在处理的数据库中的两个表,并且碰巧具有相同的名称(OE_Down),但不同的模式(显然),这就是我思考这个问题的原因。

因此,如果我执行查询 SELECT * FROM OE_DOWN ,则结果是我认为它默认的 dbo 模式。我知道正确的做法是将模式与表一起指定,但为什么不使用它们的对象 ID 来代替,因为它们比其他任何东西都是唯一的。

4

1 回答 1

3

因为 object_id 不是数据库中的对象,它只是 sys.Tables 的一个字段...

而且您不能对字段值进行直接的 dml(数据操作语言)语句,而只能对 db(模式)对象。

问sys.tables可以用来生成动态sql,但不能直接dml语句。

于 2013-12-06T18:48:09.553 回答