SQL Server之自动创建视图
本方法只适合特定模式的视图创建.
比如,创建需要整张表列名的视图,或者当表和需要的列名统计在一张数据表当中,如图所示:
首先要先获取要创建视图所需要的表,这里我获取的是整个数据库中的表,
IF OBJECT_ID('tempdb..#tablename') IS NOT NULL BEGIN DROP TABLE #tablename END SELECT name,ROW_NUMBER() over (order by name) id INTO #tablename FROM [sys].[tables] AS q
这里通过Row_NUMBER()来给每一列返回一个数字ID,在下面可以通过这个ID来循环获取表名.
接着来拼接视图的名称,,名称可以通过实际的需求来.
IF OBJECT_ID('tempdb..#viewname') IS NOT NULL BEGIN DROP TABLE #viewname END SELECT 'v_'+name AS name ,id INTO #viewname FROM #tablename
接下来就是核心的代码,之前就说过我们可以通过id来循环获取表名来创建视图,当然也可以通过这样的方法来获取列名,只不过我们要处理一下列名,将其处理成 a,b,c,d这样的格式.
DECLARE @j INT,@i INT,@name NVARCHAR(200),@viewname NVARCHAR(200) SET @i=1 SET @j=1 DECLARE @B INT ,@A INT,@str NVARCHAR(200),@strw NVARCHAR(200),@last NVARCHAR(200) SET @B=1 SET @A=1 SET @str='' WHILE @j<=(select max(id) from (select name ,row_number() over (order by name) id from [sys].[tables])as q) BEGIN SELECT @name = name FROM #tablename WHERE id = @i SELECT @viewname=name FROM #viewname WHERE id = @i IF OBJECT_ID('tempdb..#str') IS NOT NULL BEGIN DROP TABLE #str END SELECT name,ROW_NUMBER() OVER(ORDER BY name) id INTO #str FROM syscolumns WHERE id = OBJECT_ID(@name) ----获取数据表中的列名 WHILE @A<=(select max(id) from (select name ,row_number() over (order by name) id FROM syscolumns WHERE id = OBJECT_ID(@name))as q) BEGIN SELECT @strw=name from #str where id=@B IF @str='' BEGIN SET @str = '['+@strw+']' --SET @str = @strw END ELSE begin SET @str = @str+','+'['+@strw+']' --SET @str = @str+','+@strw end SET @B = @B+1 SET @A = @A+1 END PRINT @str EXEC('create view '+ @viewname +' as (select '+@str+' from ['+@name+'])')SET @i=@i+1 SET @j=@j+1 SET @B=1 SET @A=1 SET @str='' END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?