如何获取某个视图的所有列并知道某列所属的基表(SQLServer 2000)
使用INFORMATION_SCHEMA.VIEW_COLUMN_USAGE有两个问题:
1.得到的是定义视图时用到的所有列,而不仅是视图所包含的列;
2.得到的是与基表对应的列.当视图不直接来自基表,就可能会出现视图中多个列对应同一表同一字段,通过INFORMATION_SCHEMA.VIEW_COLUMN_USAGE得到的只是一个字段.
通过查询视图结构不存在上述问题,但是得不到列所属的基表
盼各位指点!!!
问题点数:20、回复次数:10Top
1 楼mklklk()回复于 2005-12-27 10:26:17 得分 0
??Top
2 楼lw1a2(一刀 现在改六点下班了:()回复于 2005-12-27 10:27:24 得分 0
sp_depends 视图
Top
3 楼dutguoyi(新鲜鱼排)回复于 2005-12-27 10:44:37 得分 0
This example lists the database objects that depend on the Customers table.
USE Northwind
EXEC sp_depends 'Customers'
Top
4 楼mklklk()回复于 2005-12-27 10:46:01 得分 0
sp_depends同样存在INFORMATION_SCHEMA.VIEW_COLUMN_USAGE的问题,INFORMATION_SCHEMA.VIEW_COLUMN_USAGE就是建立在sp_depends之上的.
不仅要知道视图中的列都来自哪些表的的哪些字段,还要知道这些字段作为视图列的名字.Top
5 楼mklklk()回复于 2005-12-27 11:01:29 得分 0
换种问法:
通过sp_columns'viewName'得到了视图的列.
如何知道某列对应的[tableName].[fieldName]?Top
6 楼dutguoyi(新鲜鱼排)回复于 2005-12-27 11:35:25 得分 10
USE pubs
IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_NAME = 'titles_view')
DROP VIEW titles_view
GO
CREATE VIEW titles_view
AS
SELECT title as t1, type, price, pubdate
FROM titles
GO
/*
name type updated selected column
-----------------------------------------------------------------------------------
dbo.titles user table no no pubdate
dbo.titles user table no no title
dbo.titles user table no no type
dbo.titles user table no no price
*/
exec sp_depends 'titles_view'
drop view titles_view
好像dbo.titles可以体现Top
7 楼mklklk()回复于 2005-12-27 12:00:13 得分 0
问题是如何知道titles_view.t1与titles.title对应?
特别是当视图是这种情况
CREATE VIEW titles_view
AS
SELECT title as t1,title as t2 type, price, pubdate
FROM titles
exec sp_depends 'titles_view' 的结果集不变Top
8 楼AriesOracle(啥也不会...)回复于 2005-12-27 12:01:31 得分 0
sp_depends 应该可以基本实现楼主的需求了吧,如果想查出嵌套的视图所对应的原表的列的话我觉得自己写语句可能更好,更灵活,具体可以参考sp_depends代码Top
9 楼AriesOracle(啥也不会...)回复于 2005-12-27 12:07:30 得分 10
如果是这样的需求的话,还是自己写语句吧,比如下面的视图
use Northwind
create view vw_test
as
select FirstName + ' ' + LastName as FullName
from Employees
你希望FullName怎么和原表Employees中的字段对应呢?呵呵
所以还是自己写语句更合适,而不是靠SQL Server提供的系统过程等Top
10 楼mklklk()回复于 2005-12-27 13:03:49 得分 0
楼上说的有道理,看来是需求有问题,否则SQL server就应该已经提供了,呵呵.非常感谢诸位!Top




