T-SQL获取视图列定义

时间:2019-07-08 09:39:53

标签: sql-server tsql sql-server-2016

我发现许多地方都有相似之处,但没有一个地方与我要寻找的地方真正相近,这是获得视图的各个列的实际定义(与完整的视图定义相比)。

给出以下示例,我试图分别获取视图各列的定义。

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,但对于视图来说绝对是完美的。

0 个答案:

没有答案