当前位置:首页 » 编程软件 » 视图的脚本

视图的脚本

发布时间: 2023-05-02 16:54:05

sql视图保存后,查询时总是显示符号非法

首先,创建两个视图,视图的脚本如下:

--视图 vCustomersA
create view vCustomersA
as
select CustomerID ,CompanyName,ContactName,ContactTitle,
Address,City,Region,PostalCode,Country,Phone,Fax
from dbo.Customers
go

--视图 vCustomersB
create view vCustomersB
as
select * from vCustomersA
go

然后,使用这两个视图查询客户ID为ALFKI的资料,查询语句如下:

select * from vCustomersA where CustomerID = 'ALFKI'
select * from vCustomersB where CustomerID = 'ALFKI'

查询的结果如下:

一切正常,这个时候,需求发生了变化,我们需要改动vCustomersA,改动后的脚本如下:(为了说明问题,我们只是把CompanyName和ContactName互换一下位置)

--改动后的视图vCustomersA
alter view vCustomersA
as
select CustomerID ,ContactName,CompanyName,ContactTitle,
Address,City,Region,PostalCode,Country,Phone,Fax
from dbo.Customers
go

这个时候,当我们再次使用视图vCustomersB查询客户ID为ALFKI的资料的时候,错误已经悄然来临,你注意到了吗?让我们来看一下这两个视图的查询结果吧,查询语句如下:

select * from vCustomersA where CustomerID = 'ALFKI'
select * from vCustomersB where CustomerID = 'ALFKI'

查询的结果发生变化。你注意到数据的异常了吗?使用视图vCustomersB查询的结果出现了错误,CompanyName显示的资料是:Maria Anders,而在视图vCustomersA查询的结果中CompanyName是:Alfreds Futterkiste。我们仅仅是在vCustomersA中互换了两个字段的位置,再次使用vCustomersB查询数据却发生了数据错位的现象,这是什么原因导致的呢?

带着这个问题,让我们去了解一下,何谓视图?在Sql Server2000的帮助文档中是这样描述视图的,定义如下:“视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储悉慧的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。”通过这个定义我们可以看出,视图是一个虚拟的表,它仅仅包括视图的定义脚本,查询的内容则是动态的生成。当我们创建了一个视图以后,唤陆薯视图的脚本会保存到当前数据库的系统表syscomments里,我们可以通过系统提供的存储过程:sp_helptext查询得到视图的定义脚本。从定义上看,好像并不能得到我们想要的答案,那么我们就先不管Sql Server2000是如何实现视图的,我们先来解决一下当前的问题(我上面提到的)。可能有些朋友已经知道了解决问题的办法了,那就是把vCustomersB的定义脚本重新执行一下(其实只需要把create换成alter执行一下就可以),脚本和者如下:

--重新执行一下vCustomersB的定义脚本

alter view vCustomersB
as
select * from vCustomersA
go

那么,除了这个方法以外,其实SqlServer2000也提供了一个扩展存储过程sp_refreshview来帮我们做这件事情,调用的脚本如下:

--刷新指定视图的元数据

exec sp_refreshview 'vCustomersB'

我个人目前就知道这两个办法,不知道,你还有没有其他的办法,有的话可以一起分享一下。

sp_refreshview的功能描述为:“刷新指定视图的元数据。由于视图所依赖的基础对象的更改,视图的持久元数据会过期。”由于sp_refreshview的代码被封装了(没有公开),所以我们看不到它的内部实现,不过看了这个存储过程的描述,你是否对视图有了新的认识呢?

从这里,我们可以看到,当我们使用一个视图查询数据的时候,其实我们是在使用视图的元数据来查询的,当视图依赖的对象发生了变化以后,视图的元数据就需要更新,这样,使用视图时才不会违背我们的意愿。

知道了问题的产生的原因后,那么我们在重新修改一个表或视图的脚本时,我们就需要更新依赖于该对象的视图,否则就会出现意想不到的错误。如何找到依赖于该对象的对象(包括视图,触发器,存储过程)呢?SqlServer2000在该数据库的系统表sysdepends里记录这些依赖关系,所以你可以查询该表获取你想要的信息,但其实,你可以通过使用系统提供的存储过程:sp_depends来获取该对象的所依赖的对象(返回的第一个表)以及依赖于该对象的对象(返回的第二个表),脚本如下:

--查询vCustomersA的依赖的对象以及依赖于vCustomersA的对象

exec sp_depends 'vCustomersA'

查询的结果如下:

注:sp_depends的代码是公开的,有兴趣的可以看一下其实现过程。

到此,你应该明白,当你更新你的表或视图的时候,你还要刷新依赖于这些对象的视图的元数据,即需要调用sp_refreshview来刷新依赖于该对象的视图。但是你在查询依赖于一个表或者视图的对象集合的时候需要注意的一点是,在你更新了一个表或视图之后,那些之前创建的依赖于该表或视图的依赖关系将会丢失(你更新的表或视图所依赖的对象集合不会丢失),用我之前的例子来看,vCustomersB依赖于vCustomersA,那么当我们修改了vCustomersA以后,vCustomersB与vCustomersA之间的依赖关系将会丢失而vCustomersA所依赖的Customers将不会丢失(依赖关系在对象创建或更新时创建,更新时,会把先前的依赖关系删掉)。(调用sp_depends你就可以看出来这种微妙的变化)

Ⅱ 怎样获得视图的sql脚本

SQL> create view v_1 as select * from test;

视此大宏图已建立。

SQL> select text from all_views where view_name='V_1'仿蚂;

TEXT
-----------------------------------------------------------------
select "TIME" from test

SQL>森册

Ⅲ matlab怎么把变量视图和脚本放在一起

在脚本文件右上角的大叉下,有一个类似excel的重做按钮。当你把鼠标放在上面时,会显示“dock”。只需点击它
如果要单独取出,有一个undo
在MATLAB中创建和调试脚本文件的方法如下:
1打开MATLAB软件,显示如下界面。
2之后,当我们看到界面的左上角时,我们将清楚地看到“new”一词。单击它。
3在这里,建议您在编写代码之前输入clear和CLC,以便删除工作区中存储的变量,以免影响以后编写的代码。
4后,点击顶部绿色运行符号,弹出需要保存的界面。
保存脚本时,我们可以根据自己的需要选择更好的名称来保存和运行。
6之后,我们将在工作区中看到所需的a的最终值。这将创建一个脚本文件

Ⅳ 如何用脚本配置IE兼容性视图设置

【关 键 词】:IE 兼容性视图
【适用版本】:FusionAccess各版本
【故障模式】:兼容性/应用软件兼容性
【问题现象】:
通过域策略和用户配置文件,设定IE的兼容性视图后,新发放虚拟机兼容性视图设置没有效果
兼容性视图设置界面:工具->兼容性视图设置

域策略配置界面:

【告警信息】:无
【问题分析】:
通过process monitor抓取IE兼容性视图设置更改的注册表项,通过脚本导入到当前登录用户的配置文件中。
【解决方法】:
1. 在IE中,通过工具->兼容性视图设置,配置兼容性视图列表。
2. 执行如下命令,保存IE中设置后的二进制数据。蓝色文本以实际值替换,注意删除换行符
reg query "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData" /v UserFilter
UserFilterREG_
3. 在模板中配置用户初次登录执行脚本,使用户登录时生效。
下面是批处理脚本内容,保存在C盘根目录下IECompat.bat
@echo off
reg add "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\BrowserEmulation\ClearableListData" /v UserFilter /t REG_BINARY /f /
把以下保存为IECompat.vbs,然后放在C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
路径下
'该本默认仅执行一次
Dim oShell
Set oShell = WScript.CreateObject("WScript.Shell")
oShell.run "C:\IECompat.bat",0
Set oShell = Nothing
'Delete the script
DeleteSelf
Sub DeleteSelf()
Dim objFSO
'Create a File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Delete the currently executing script
objFSO.DeleteFile WScript.ScriptFullName
Set objFSO = Nothing
End Sub
【总结&建议】:
该配置方法可单独作为批处理或vbs脚本双击执行使用。

热点内容
编程是 发布:2024-05-12 21:54:40 浏览:483
编程补习班 发布:2024-05-12 21:52:10 浏览:467
mapreduce缓存 发布:2024-05-12 21:43:30 浏览:928
易谱加密狗 发布:2024-05-12 21:43:30 浏览:327
传奇世界飞天脚本 发布:2024-05-12 21:34:41 浏览:376
万联证券密码没改为什么提示错误 发布:2024-05-12 21:34:02 浏览:599
java安全加密 发布:2024-05-12 21:20:06 浏览:157
php屏幕分辨率 发布:2024-05-12 20:56:10 浏览:255
html静态网页源码 发布:2024-05-12 20:37:28 浏览:454
蒜的存储温度 发布:2024-05-12 20:35:20 浏览:836