SQL基础11:sqlserver、oracle添加修改删除字段注释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL基础11:sqlserver、oracle添加修改删除字段注释相关的知识,希望对你有一定的参考价值。

参考技术A 使用上面的命令,不管是否已经添加过注释,都会通过覆盖的方式替换掉。当语句当中的注释不为空的时候,就相当于是修改表或字段的注释;当表或者字段的注释为空的时候,就相当于是在增加注释;更新也是一样。

我们在给字段添加注释的时候往往会有很多字段,比如一张表的字段会有50个字段,如果逐条添加至少会用20分钟这样效率太慢了,这时候我们要想如何快速添加。这里给大家附上我的方法

在 SQL Server 中,表添加一列。导致视图错误

【中文标题】在 SQL Server 中,表添加一列。导致视图错误【英文标题】:In SQL Server, table add a column. causing view error 【发布时间】:2013-05-06 01:41:25 【问题描述】:

在 SQL Server 中,使用两个表创建一个视图。视图中使用了* 的表之一。

然后我在表格中添加一列。现在这会导致视图错误。

必须重建视图才能解决此问题。

如果这张表使用了很多视图,如何识别相关视图并重建?

有几种方法?

谢谢!

测试环境:SQL Server 2008

测试 SQL:

 if exists(select * from sys.objects where name='tblTestA' and type='u')
DROP TABLE  tblTestA

create table tblTestA(Part varchar(10),Qty int)
insert into tblTestA values('A',10)
insert into tblTestA values('B',20)
go

if exists(select * from sys.objects where name='tblTestB' and type='u')
    DROP TABLE  tblTestB
GO

create table tblTestB(Part varchar(10),Price decimal(9,4))
GO

insert into tblTestB values('A',1.1)
insert into tblTestB values('B',2.2)
GO

if exists(select * from sys.objects where name='v_test' and type='v')
    DROP VIEW  v_test
go

create View v_test
as
  select a.*,b.Price
  from tblTestA a, tblTestB b 
  where a.Part=b.Part
go

执行:

select * from v_test 
go

结果:

Part Qty Price
A   10  1.1000
B   20  2.2000

添加一列

alter table tblTestA add Remark nvarchar(200) not null default('test')
go

执行:

select * from v_test 
go

结果:

Part Qty Price
A   10  test
B   20  test

【问题讨论】:

您可以尝试在视图定义中搜索已更改的表,***.com/questions/4765323/is-there-a-way-to-retrieve-the-view-definition-from -a-sql-server-using-plain-ado Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已随 ANSI-92 SQL 标准(超过 20 年前!) 谢谢!好习惯:select a.*,b.Price from tblTestA a inner join tblTestB b on a.Part=b.Part ? 【参考方案1】:

如果您创建视图WITH SCHEMABINDING,则不会遇到此问题。对于您的 视图;-) 您可以使用sp_refreshview。

要查找哪些视图依赖于哪些表,您可以使用 GUI,但这不能很好地扩展。相反,我建议您使用系统管理视图,例如sys.sql_expression_dependencies。这使您可以遍历依赖视图并为每个视图发出exec sp_refreshview

【讨论】:

【参考方案2】:

您可以使用 SQL Server Management Studio 找出相关视图。

您需要在 SSMS 中选择表,然后右键单击它。选择View Dependencies

在这张图片中,表格是CompanyCategoryXref(蓝色箭头)。这种情况下的依赖视图是CompanyCategory(红色箭头)。您还可以看到选中的项目CompanyCategory 的对象类型为View(黄色圆圈)。

【讨论】:

根据您的提示,我找到了所有视图。然后什么 ?一一手动执行查看脚本? @dream - 正如其他答案中所建议的那样,您可以拥有一个更新视图的脚本。【参考方案3】:

我们遇到了同样的问题 - 我们的解决方案必须提供一个 SQL 脚本来刷新所有视图。我们在每批修改数据库结构的更新脚本之后运行此脚本 - 这可确保所有视图都是最新的且正常运行。

这是 T-SQL 代码:

DECLARE @viewname sysname
DECLARE @counter INT

SET @counter = 1

DECLARE viewname_cursor CURSOR FAST_FORWARD FOR
    SELECT v.[name] 
    FROM sys.views v
    INNER JOIN sys.sql_modules m ON v.object_id = m.object_id
    WHERE m.is_schema_bound = 0  -- only refresh non-schemabound views

OPEN viewname_cursor

FETCH NEXT FROM viewname_cursor INTO @viewname

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT CAST(@counter AS varchar(3)) + '. Refreshed view ' + @viewname

    EXEC sp_refreshview @viewname   -- refresh the view in question

    SET @counter = @counter + 1

    FETCH NEXT FROM viewname_cursor INTO @viewname
END

CLOSE viewname_cursor
DEALLOCATE viewname_cursor
GO

【讨论】:

以上是关于SQL基础11:sqlserver、oracle添加修改删除字段注释的主要内容,如果未能解决你的问题,请参考以下文章

Oracle面试题(基础篇)

Oracle面试题(基础篇)

Oracle面试题(基础篇)

使用 ssis 从 SQL Server 表复制到 Oracle 11g

如何直接在sql server中添加一条数据

sql server 2008 链接 ORACLE 问题