我发现许多地方都有相似之处,但没有一个地方与我要寻找的地方真正相近,这是获得视图的各个列的实际定义(与完整的视图定义相比)。
给出以下示例,我试图分别获取视图各列的定义。
CREATE TABLE [dbo].[TEST_TABLE]
(
[id] int NOT NULL,
[created] datetime NULL,
[counts] int NULL,
[url] varchar(20) NULL
);
GO
CREATE VIEW [dbo].[TEST_VIEW]
WITH SCHEMABINDING
AS
SELECT [id] AS [id]
, CONVERT( varchar(16), [created], 107 ) AS [created]
, CONVERT( varchar(20), [counts] ) + ' - ' + [url] AS [url]
FROM [dbo].[TEST_TABLE];
GO
DROP VIEW [dbo].[TEST_VIEW];
DROP TABLE [dbo].[TEST_TABLE];
GO
我正在寻找的结果与此类似:
name definition
------- ------------------------------------------------
id [id]
created CONVERT( varchar(16), [created], 107 )
url CONVERT( varchar(20), [counts] ) + ' - ' + [url]
由于我已经整天都在为此而苦苦挣扎,因此在接近此方面的任何帮助将不胜感激。我可以得到完整的视图定义,但是尝试使用列可能会很混乱:
SELECT sysmod.definition AS [View Definition]
FROM sys.sql_modules sysmod
INNER JOIN sys.objects sysob ON ( sysmod.object_id = sysob.object_id )
INNER JOIN sys.schemas syssh ON ( sysobj.schema_id = syssch.schema_id )
WHERE sysob.name = N'TEST_VIEW'
AND syssh.name = N'dbo';
类似sys.computed_columns
,但对于视图来说绝对是完美的。