在SQL Server中如何查找对象并确定它是视图还是表?

3

我认为这个问题很容易解决,但是我无法掌握它。

我没有创建这个数据库或工作,所以要通过故障排除方法进行处理。

我有一个SQL Server作业失败了,它有多个步骤。

其中一个步骤是

select * into [Pastel_OrderStock] from [Pastel_SOProducts]

这会导致错误:

将数据类型 varchar 转换为 float 时出错。

如果我尝试进行以下操作:

select * from [Pastel_SOProducts]

出现了相同的错误。

我的问题是,我在任何一个数据库表或视图中都看不到名为Pastel_SOProducts的表或视图,但鉴于该错误信息,它显然是存在的。

我该如何找到它,更重要的是,如何查看表结构或视图语法?

提前致谢!


1
SELECT SCHEMA_NAME(schema_id) + '.' + QUOTENAME(name), type_desc FROM sys.objects WHERE name = N'Pastel_SOProducts'; 如果是视图,则执行 SELECT OBJECT_DEFINITION([object_id]); - Aaron Bertrand
这是你应该始终使用两部分名称正确引用对象的原因之一。 - Aaron Bertrand
谢谢Aaron,这返回了表名的结果。但是我该如何进行故障排除或查找表在我的管理工作室控制台中的位置呢?谢谢。 - Smudger
1
也许这是一个同义词?也许它不在 dbo 中,所以你没有按字母顺序找到它?也许你正在查找错误的数据库? - Aaron Bertrand
3个回答

6

它将位于sys.objects中。 typetype_desc将显示对象类型。


1

需要检查的事项:

  • 检查您的权限。您的数据库管理员可能已将您的帐户限制为某些表。
  • 检查表的所有者是否不是dbo。

权限问题不会导致转换错误。如果他们被允许从对象中选择直到出现错误,那么就不能有限制阻止他们看到该对象的存在。 - Aaron Bertrand

0

另一个答案中所述,您想从sys.objects表中提取'type_desc':

select name, type, type_desc from sys.objects where name = 'Pastel_SOProducts'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接