SQL INFORMATION_SCHEMA.VIEWS

Posted

技术标签:

【中文标题】SQL INFORMATION_SCHEMA.VIEWS【英文标题】: 【发布时间】:2021-04-09 10:07:39 【问题描述】:

我想让 2020 年包含所有视图内容的 2019 年,但我对长视图有疑问。视图定义列是否有字符限制?因为据我所知,代码太长的视图有问题。有补救办法吗?

declare @Icerik varchar(max)
declare pcursor cursor
for
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME like '%2019%'
open pcursor
fetch next from pcursor into @Icerik
    while @@FETCH_STATUS = 0
        begin
            set @Icerik = replace(@Icerik,'2019','2020')
            exec (@Icerik)
            fetch next from pcursor into @Icerik
        end
    close pcursor
    deallocate pcursor

【问题讨论】:

【参考方案1】:

视图定义列有字符限制吗?

来自INFORMATION_SCHEMA.VIEWS:

VIEW_DEFINITION nvarchar(4000) 如果定义的长度大于 nvarchar(4000),则此列为 NULL。否则,此列是视图定义文本。


我建议使用sys.sql_modules

definition nvarchar(max) 定义此模块的 SQL 文本。该值也可以使用 OBJECT_DEFINITION 内置函数获取。

db<>fiddle

或者SELECT OBJECT_DEFINITION(OBJECT_ID('schema.view_name'))

【讨论】:

sys.views 确定吗? @Charlieface db<>fiddle demo Sys.views 不包含视图的定义 sys.sql_modules不包含名称或是否是视图,只是object_id,因此无论哪种方式您都需要加入sys.viewssys.objects。无论如何,您都可以使用OBJECT_DEFINTION(object_id) 获得定义

以上是关于SQL INFORMATION_SCHEMA.VIEWS的主要内容,如果未能解决你的问题,请参考以下文章

sql [sql技巧]一些sql技巧#sql

sql 2008 r2 在sql 2008上兼容么

SQL基础

有大神知道,sql server 中如何批量执行sql语句吗?

pl sql developer怎么执行sql

pl sql developer怎么执行sql