日度归档:2019年9月10日

mssql sqlserver 批量查询sql函数、存储过程内容的方法分享


摘要:
下文讲述在sqlserver批量获取sql函数、存储过程内容的方法,如下所示:
实验环境:sql server 2008 R2


实现思路:
由于sql_modules和all_objects系统表中的包含脚本的定义信息,所以我们可以通过检索这两张系统表批量获取函数和存储过程定义的内容信息

   SELECT a.name as [函数或存储过程名称],b.[definition] as [脚本内容]
          FROM sys.all_objects a,sys.sql_modules b
             WHERE a.is_ms_shipped=0 AND a.object_id = b.object_id AND a.[type] IN ('P','AF')
             ORDER BY a.[name]

mssql sqlserver 表结构更新,但视图未更新的处理方法


摘要:
下文讲述我们在sqlserver中,编写使用时,使用*代替列名,当数据表列增加时,视图未得到更新的处理方法
实验环境:sql server 2008 R2


项目背景:
今天同事告诉我,查询视图时,出现找不到列,明明数据表上已经添加了相关列

通过查询视图的脚本内容:

 create view [视图名称] 
 as 
 select * from [数据表名称]


出现找不到列名的原因,是由于数据表新增列后,视图中的相关信息还缓存在数据库中,我们可以通过以下两种方式刷新视图,
使视图中存在新增数据列

解决方法1:
删除视图,重建视图
————————————-
解决方法2:
刷新视图

   EXECUTE sp_refreshview N'视图名称';  

相关阅读:
sp_refreshview 关键字简介

mssql 使用外键名称查看外键列的信息的方法分享


摘要:
下文讲述使用外键名称获取外键所属列的方法分享,如下所示
实验环境:sql server 2008 R2

实现思路:
通过查询 系统表sys.foreign_keys 和 sys.foreign_key_columns 获取外键所属列

select fk.object_id as FK_Object_ID,
    fk.name as FK_name,
    pt.name as ParentTable_Name,
    pc.name as ParentTable_Column_Name,
    rt.name as ReferencedTable_Name,
    rc.name as ReferencedTable_Column_Name
from sys.foreign_keys fk with(nolock)
inner join sys.foreign_key_columns fkc with(nolock)
    on fk.object_id=fkc.constraint_object_id
inner join sys.tables pt with(nolock)
    on fkc.parent_object_id=pt.object_id
inner join sys.columns pc with(nolock)
    on fkc.parent_object_id=pc.object_id 
        and fkc.parent_column_id=pc.column_id
inner join sys.tables as rt with(nolock)
    on fkc.referenced_object_id=rt.object_id
inner join sys.columns rc with(nolock)
    on fkc.referenced_object_id=rc.object_id 
        and fkc.referenced_column_id=rc.column_id
		where rt.name=N'外键名称'