0

我以某种方式设法在具有空表架构的数据库中创建了一个表。我无法查询该表,因为它没有所有者,并且出于同样的原因更改该表也不起作用。

我会使用以下方法更改表格:

ALTER SCHEMA null TRANSFER dbo.SubscriptionAnswerMR

但这不起作用。

information_schema.tables 如下所示:

TABLE_CATALOG   TABLE_SCHEMA    TABLE_NAME              TABLE_TYPE
q_Profiles              NULL    SubscriptionAnswerMR    BASE TABLE

所以我的问题是:如何更改 q_Profiles 的 table_schema?

SQL Server 2000(编辑)Microsoft SQL Server Management Studio 2008R2

4

2 回答 2

2

您应该能够通过查看以下查询的结果来验证您的表是否正常:

SELECT u.name
  FROM q_Profiles..sysobjects AS o
  INNER JOIN q_Profiles..sysusers AS u
  ON o.uid = u.uid
  WHERE o.name = 'SubscriptionAnswerMR';

这应该是dbo除非有人用不同的所有者明确创建它们或使用sp_changeobjectowner. 如果您发现 sysobjects 也有错误的答案,您可以使用它:

EXEC sp_changeobjectowner 'SubscriptionAnswerMR', 'dbo';

ALTER SCHEMA在这里无效,因为它是在 SQL Server 2005 中引入的。尽管描述“不起作用”的含义对您很有用。

INFORMATION_SCHEMA正如@Pondlife 指出的那样,这是一组非常不可靠的观点。另请参阅以下内容,这在 SQL Server 2000 中对您没有多大帮助,但应该有助于向前发展:

另外作为旁注,您似乎对表和数据库感到困惑。TABLE_CATALOG是数据库,不是表。

于 2012-05-14T19:21:26.000 回答
1

您是否在文档中注意到此评论?

不要使用 INFORMATION_SCHEMA 视图来确定对象的架构。查找对象架构的唯一可靠方法是查询 sys.objects 目录视图或使用 OBJECT_SCHEMA_NAME 函数。

于 2012-05-14T17:46:47.703 回答