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.views
或sys.objects
。无论如何,您都可以使用OBJECT_DEFINTION(object_id)
获得定义以上是关于SQL INFORMATION_SCHEMA.VIEWS的主要内容,如果未能解决你的问题,请参考以下文章