Tim*_*sch 80 sql-server ado view
我使用ADO Connection OpenSchema()
调用以各种方式成功从SQL服务器上托管的数据库中提取列定义,因此我可以在另一个SQL数据库中以编程方式重新创建这些表.到现在为止还挺好.
使用多个视图进行与上表的主要交互; 虽然OpenSchema()
能够以与返回表的列定义相同的方式返回视图的列定义,但缺少一小部分信息 - 视图中的列映射到的基础表中的哪个表和列.
我尝试使用ADOX目录视图访问用于创建视图的SQL命令,但似乎我们使用的SQL Server的OLEDB驱动程序不支持此功能.
有没有办法通过ADO获取视图配置的这些信息,或者以"ColumnX映射到表Z中的ColumnY"的方式或以用于创建视图的实际SQL命令的形式?
Nic*_*rey 146
哪个版本的SQL Server?
对于SQL Server 2005及更高版本,您可以获取用于创建视图的SQL脚本,如下所示:
select definition
from sys.objects o
join sys.sql_modules m on m.object_id = o.object_id
where o.object_id = object_id( 'dbo.MyView')
and o.type = 'V'
Run Code Online (Sandbox Code Playgroud)
这将返回包含用于创建/更改视图的脚本的单个行.
表中的其他列说明了编译视图时的选项.
注意事项
如果上次使用ALTER VIEW修改了视图,则脚本将是ALTER VIEW语句而不是CREATE VIEW语句.
该脚本反映了创建时的名称.它更新的唯一时间是执行ALTER VIEW,或者使用CREATE VIEW删除并重新创建视图.如果视图已重命名(例如,通过sp_rename
)或所有权已转移到其他模式,则您获取的脚本将反映原始的CREATE/ALTER VIEW语句:它不会反映对象的当前名称.
有些工具会截断输出.例如,MS-SQL命令行工具sqlcmd.exe以255个字符截断数据.您可以传递参数-y N
以使用N
字符获取结果.
Dav*_*ger 21
Microsoft列出了以下获取View定义的方法:http: //technet.microsoft.com/en-us/library/ms175067.aspx
USE AdventureWorks2012;
GO
SELECT definition, uses_ansi_nulls, uses_quoted_identifier, is_schema_bound
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('HumanResources.vEmployee');
GO
Run Code Online (Sandbox Code Playgroud)
USE AdventureWorks2012;
GO
SELECT OBJECT_DEFINITION (OBJECT_ID('HumanResources.vEmployee'))
AS ObjectDefinition;
GO
Run Code Online (Sandbox Code Playgroud)
EXEC sp_helptext 'HumanResources.vEmployee';
Run Code Online (Sandbox Code Playgroud)
Tra*_*Guy 12
对于SQL 2000的用户,将提供此信息的实际命令是:
select c.text
from sysobjects o
join syscomments c on c.id = o.id
where o.name = '<view_name_here>'
and o.type = 'V'
Run Code Online (Sandbox Code Playgroud)
小智 5
SELECT object_definition (OBJECT_ID(N'dbo.vEmployee'))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
167954 次 |
最近记录: |