楼主: ccwlm741212

[精华] Ms SQL常见问题收集整理集(不断收集中...)

[复制链接]
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
141#
 楼主| 发表于 2004-1-6 22:12 | 只看该作者
Web环境下MS SQL Server中数据的磁带备份与恢复
作者:韩红滔,张平安



  摘 要:介绍了磁带数据备份及恢复的工作过程,包括在硬盘上建立了一个与磁带的容量相当的数据库,即桥数据库
和在Web信息系统中要实现完整的磁带数据备份及恢复功能。从理论与实践上阐述了如何利用SQL中现有的数据库备份和恢
复的命令以及NT中的IDC技术。
  关键词:Web信息系统;磁带数据备份;桥数据库;IDC文件;数据恢复


1 引言

  实现磁带备份数据的功能有两方面的困难:首先,MS SQL Server(以下简称SQL)所提供的数据库的整体备份及恢复
功能不能直接满足本系统要求的数据滚动备份。其次,需要解决如何在Web环境下实现磁带数据备份功能。
  利用SQL中现有的数据库备份和恢复的命令以及NT中的IDC技术,实现SQL数据库中数据滚动备份到磁带的功能。本系统
所实现功能既能保证近一段时间的数据总在数据库中,又能保证系统管理员可随时恢复备份数据,供用户查询。本文所实
现的功能具有普遍的意义,特别适用于中小型企业开发基于Intranet技术的管理信息系统。

2 磁带数据备份及恢复的工作过程

  为了充分利用SQL中现有的数据库备份与恢复功能,以降低实现磁带数据备份的代价,我们特地在硬盘上建立了一个与
磁带的容量相当的数据库,我们称之为桥数据库,如FJJDBBK。可方便地实现数据的滚动备份了。其工作过程是:管理员把
某月的数据从主数据库移到桥数据库中;然后用SQL的备份功能把桥数据库备份到磁带上。用户需要查看磁带中的历史数据
时,系统又用SQL的恢复备份功能把磁带中的数据恢复到桥数据库中,用户直接在桥数据库中查阅历史数据。此外,在数据
备份到磁带后,在进行下次数据备份前,必须清空备份数据库中的数据。为了提高工作效率,我们建立了一个空白桥数据
库(没有数据时的桥数据库)。每次进行磁带备份数据之前,就用此空白数据库恢复桥数据库。空白数据库文件建立后要
保存好,不可随便删除。
  建立该备份空白数据库过程为:先建立主数据库FJJDBBK,然后在FJJDBBK中建立与当前数据库中一样结构的表。建立
这些表结构时最好的方法是先用Enterprise Manager的Object菜单下的Generate SQL Scripts功能生成建立这些表的
Scripts文件,然后选择FJJDBBK数据库,用Enterprise Manager的Tools菜单下的Query Analyzer功能运行该文件,就建立
了这些所需表。显然,这时的FJJDBBK为空数据库。我们再利用备份命令或运行Tools菜单下的Backup/Restore功能备份该
空数据库。

3 磁带数据备份及恢复的实现

  在NT中,Web服务器IIS(Internet Information Server)提供了完善的访问SQL的技术IDC。IDC是一个DLL文件
(HTTPODBC.DLL),其实,它通过ODBC接口可访问各种数据库。在具体实现Web页面访问数据库时,需建立两种类型的文
件:IDC文件(*.idc)和HTML模板文件(*.htx)。IDC文件用于控制数据库的访问。它一般由两部分组成:
  .文件头 指明系统数据源,模板文件名,用户名及口令。有时还包括一些有关检索数据库方面的参数设置。
  .文件主体 这部分内容以"SQLStatement:"为起始标志,然后写操纵数据库的标准SQL语句。注意,每条语句以"+"号
开头,它作为区分每条SQL语句的标志。需要强调的是,对于MS SQL数据库,IDC可用其任何标准的命令及函数。例如定义
变量,控制数据流等(见实例)。
  IDC的处理流程如下:首先,Web服务器IIS分析浏览器传来的URL字符串。如果当前字符串以"*.idc"结尾,就将该IDC
请求传给IDC接口模块,IDC将依次读取并解释IDC文件的内容,通过ODBC模块向数据库服务器发服务请求;数据库服务器将
执行结果通过ODBC接口返回给IDC模块。接着IDC模块把结果插入指定的的模板文件,形成一个实际的HTML文件交给IIS;最
后由IIS将该HTML返回浏览器。
  在Web信息系统中要实现完整的磁带数据备份及恢复功能需要实现以下三个功能:"数据备份"功能、"数据恢复"功能
和"清理数据"功能。"数据备份"功能在保证系统管理员操作的前提下,根据用户输入的所要备份数据的起始日期和终止日
期,从主数据库把要备份的数据转存到桥数据库中,然后运用SQL的DUMP命令实现该功能。"数据恢复"功能则在保证系统管
理员操作的前提下,提供"恢复桥数据库"和"恢复空白桥数据库"的功能。只要运用SQL的LOAD命令就可实现上述功能;同
样,"清理数据"功能也要保证在系统管理员操作的前提下,根据用户输入的所要删除数据的起始日期和终止日期,运用SQL
中的DELETE命令删除当前数据库中数据。因此。为了"数据备份"功能和"清理数据"功能的顺利实施,要求每个表都有归档
时间字段。
  实现本系统磁带数据备份与恢复功能的部分IDC文件如下:
/*BKUP.IDC*/
Datasource: Web SQL
Template: BKUP.htx
Username: sa
Password: sa
SQLStatement:
+if %jb%=1
+/*判断系统维护员*/
+SELECT qsrq=convert(varchar(12),getdate(),1),


zzrq=convert(varchar(12),+dateadd(day,1,getdate()),1)

+/*预置起始日期和终止日期*/

/*BKUPCZ.IDC*/
Datasource: Web SQL
Template: BKUPCZ.htx
Username: sa
Password: sa
SQLStatement:
+INSERT FJJDBBK.DBO.JKLD SELECT * FROM FJJDB.DBO.JKLD
+where convert(varchar(12),gdsj,1)>=′%QSRQ%′
and convert(varchar(12),gdsj,1)< =′%ZZRQ%′
…………
+/*把当前数据库中选定的数据转存到桥数据库中*/
+DUMP DATABASE FJJDBBK TO TAPE = ′\\.\tape0′ WITH INIT, NOUNLOAD
+/*备份数据*/
+SELECT TS=′备份数据库操作已完成!′
/*HUIF.IDC*/
Datasource: Web SQL
Template: HUIF.htx
Username: sa
Password: sa
SQLStatement:
+if %jb%=1
+begin
+LOAD DATABASE FJJDBBK FROM TAPE=′\\.\TAPE0′ WITH
NOUNLOAD
+/*恢复备份数据*/
+SELECT TS=′恢复数据库操作已完成!′+/*
+end

/*QLSJKCZ.IDC*/
Datasource: Web SQL
Username: sa
Password: sa
Template: QLSJKCZ.htx
SQLStatement:
+delete FJJDB.DBO.JKLD
where convert(varchar(12),gdsj,1)>=′%QSRQ%′ and
convert(varchar(12),gdsj,1)<=′%ZZRQ%′
…………
+/*删除当前数据库中选定的数据*/
+SELECT TS=′删除操作已完成!′
  在本系统中,主数据库保证存储4个月数据。系统规定,系统管理员每月月初备份上月的数据到磁带。然后删除前第4
个月的数据。实现了当前数据与历史数据的同步查阅,这是Web系统的一个显著的优点。

4 结语

  本文介绍了一种特殊的数据磁带备份与恢复的具体实现方法。需要指出的是,数据库备份操作是数据库管理系统非常
重要的环节,而数据库备份操作过程又比较复杂,因此,要求我们必须建立完善的规章制度,由专业的系统管理员进行数
据库备份和恢复操作。

作者:韩红滔(长沙交通学院路桥系 湖南.长沙410007)
     张平安(西安交通大学系统工程研究所 陕西.西安710072)

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
142#
 楼主| 发表于 2004-1-6 22:13 | 只看该作者
SQL2000管理SQL7服务器出现TIMEOUT问题的解决
作者:Disney


小弟的机器上装上了SQL2000,准备学习学习,谁知道在管理其它的SQL7的服务器时出现提示信息“Timeout expired”,故障现象如下: 1、联接本地局域网上的服务器,使用ENTERPRISE MANAGER时注册服务器时出现以上错误提示,但使用QUERY ANALYZER时却没有问题,只是速度有点慢而已。 2、联接INTERNET上的服务器,使用ENTERPRISE MANAGER和QUERY ANALYZER都不行,都出现了上述错误。 最后,经过多方查找,终于查明,原来是DNS的问题。当SQL2000在联接一个服务器时需要得到此机器的域名或机器名,所以当对这些服务器进行管理时需要在HOSTS文件中设置一下。 关于HOSTS文件的资料网上已经很多了,小弟在此就不再罗嗦了。大家也可以在以下网站查阅:电脑维修 瑞派服务网

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
143#
 楼主| 发表于 2004-1-6 22:13 | 只看该作者
浅谈优化SQLServer数据库服务器内存配置的策略
作者:季广胜




  农业银行总行1998年以来正式推广了新版网络版综合业务统计信息系统,该系统是基于WindowsNT4.0平台,采用客户/服务器模式,以Microsoft SQL Server为基础建立起来的大型数据库应用程序,系统界面友好、操作简便,计算、分析、检索功能非常强大,为保证农业银行系统及时进行纵向和横向业务数据采集、按照不同要求生成统计报表,进行全面业务活动分析提供了强有力的保障。但在这套程序的推广、维护中笔者发现系统有时运行速度较慢,特别是在Win95客户端操作时尤为严重,经过排除网线连接等硬件可能带来的影响后上述问题仍然存在。笔者经过仔细摸索,发现系统对硬、软件的要求较高,为充分发挥设计效能,达到最佳运作效果,需要对计算机硬、软件系统进行较为完备的性能测试与最佳配置,特别是内存配置的好坏对系统的运行速度具有决定性的作用。下面,笔者就如何优化SQLServer数据库服务器的内存配置提出一些认识和看法。

一、有关内存的基本概念

  1?物理内存与虚拟内存
  WindowsNT使用两类内存:物理内存与虚拟内存。
  物理内存:作为RAM芯片安装在计算机内部的存储器。
  虚拟内存:用于模拟RAM芯片功能的磁盘(硬盘)空间,其实质是通过将内存中当前没有使用的部分内容临时存储到磁盘上,使系统可以使用到比机器物理内存更多的内存。
  2?分页和分页文件
  WindowsNT系统通过使用磁盘空间使得对内存的需求得到部分缓解,从而使用到比物理内存更多内存的技术就称为“交换”或分页,也就是通常所说的虚拟内存技术。通常Windows NT 4.0系统安装时将在引导驱动器上设置一个大小为16MB的交换(分页)文件(pagefile.sys)。

二、优化Windows NT 4.0系统内存配置

  在大多数情况下,为了充分发挥Windows NT 4.0系统效能,内存的作用比起处理器的处理能力更具有影响力,特别是在客户/服务器模式环境下更是如此,因为通常在这种环境下并不十分强调处理器的能力,相反却十分注重是否采用足够的内存来满足各个客户的应用需要。此外,为了获得容错功能和保护应用程序,保证应用程序高速运行、充分发挥设计功能都需要有足够多的内存,特别是工业绘图设计和各种工程应用程序更需要占用大量的内存来进行复杂的计算。
  物理内存(RAM)方便快速的优点显而易见,但由于其价格昂贵,也就不可能做到多多益善了,因此通过合理优化内存配置、扩充虚拟内存提高计算机运算速度也就成了一项很重要的应用技术手段。
  1?保证Windows NT系统基本内存需求
  Windows NT 4.0系统至小应配置12MB内存,16MB内存基本够用,正常情况下保证NT系统有32MB内存就可以了,因为并不是所有的16MB基本内存在任何时候都被同时使用。如果添加一些服务和应用程序,则对内存的需求就会急剧增大。如:
  (1)添加网络服务需要4MB内存空间;
  (2)容错功能和系统保护功能需要8MB内存(如磁盘镜像和分条功能);
  (3)进行图形图象处理需要增加16MB内存空间;
  (4)安装VC、VB开发系统需要增加16MB内存空间;
  另外,如在Windows NT上构建大型数据库如SYBASE、Microsoft SQL Server等,对内存的需求就更多了。
  2?优化内存性能
  为了使WindowsNT不至于过分占用较多的内存或者浪费处理器的时间用于换页,可以采用以下方法优化内存性能。
  (1)减少显示颜色的数量;
  (2)降低显示分辨率;
  (3)尽可能不使用或使用位宽度较小的墙纸;
  (4)关闭不需要的服务程序或驱动程序,尽量不要在服务器上使用其它应用程序。
  停用服务或驱动程序的操作步骤如下:
  ①确定需要停用的服务或驱动程序的名称;
  ②从“控制面板”中双击“服务”或“设备”图标;
  ③在列表中选择想要停用的服务或设备驱动程序的名称,单击“停止”按钮,这时出现确认操作对话框;
  ④选择“是”确认操作,然后关闭对话框完成设置。
  3?优化虚拟内存
  在对Windows NT虚拟内存进行设置时需要合理确定各个驱动器分页文件的“起始大小”和“最大值”两个参数,它们用于指定分页文件的起始空间和最大空间。下面对这两个参数作一些解释:
  起始大小:指初始创建该分页文件时的文件大小,单位为MB,根据缺省设置,这个值被设置为系统中的物理内存的大小。
  最大值:指出该分页文件的最大尺寸,单位为MB。
  (1)分页文件的设置原则:
  ①分页文件起始大小应保留缺省设置,一般情况下请不要改动;
  ②分页文件理想的最大尺寸为系统物理内存尺寸的2.5倍至4倍。需要说明的是:如果系统工作时不需要大量内存,请选择靠近下限的值,即用系统物理内存的2.5倍作为这个尺寸的起始值;如果系统工作时需要大量内存,请选择靠近上限的值。
  (2)Windows NT虚拟内存设置步骤:
  ①从“控制面板”中双击“系统”图标;
  ②在“系统特性”对话框中单击“性能”标签;
  ③在虚拟内存对话框中单击“更改”按钮,这时出现“虚拟内存”对话框,上端的驱动器框逐一列出了 Windows NT所有页面文件的大小;
  ④在驱动器列表中,选择需要设置分页文件的驱动器盘符,在“驱动器页面文件大小”对话框中列出了 “起始大小”和“最大值”两个参数栏,填入按照上面的原则确定的数值;
  ⑤单击“设置”确认以上操作,然后依次单击“确定”按钮退出各个对话框,完成设置。
  (3)Win95/98虚拟内存设置。
  Win95/98虚拟内存设置方法、步骤和原则与Windows NT 4.0的设置大致相同,请参照上面Windows NT的设置。
  4?注意事项
  (1)合理确定分页文件的最大值,根据系统需求随时进行调整,使用过多虚拟内存将导致整个系统处理性能的下降。设置虚拟内存最大值的目的是使用户不必在WindowsNT的交换文件上消耗过多的磁盘空间,通常情况下如果超过了系统需要的最佳值后,生成交换文件的磁盘空间就被浪费了。
  (2)尽可能设立专用硬盘配置内存交换区,或将交换空间放到主硬盘的另一个分区,同时应将主硬盘的交换文件大小降至16MB,这样主硬盘(分区)仅用来放置操作系统和应用程序,就可以减少交换次数,防止频繁交换耗费大量 CPU时间。
  (3)虚拟内存技术的确改善了Windows NT系统的性能,但也受到机器硬盘空间大小、硬盘速度、处理器 (CPU)速度的影响,从理想角度出发,要提高计算机的性能就必须减少交换操作的次数,但是没有一个WindowsNT计算机不发生交换,这就要求计算机要有足够的物理内存,以保持最少的交换操作。

三、优化Microsoft SQL Server数据库内存配置

  内存是影响Microsoft SQL Server系统性能的一个重要因素,SQL Server数据库安装时将为具有32MB物理内存的机器缺省配置16MB可用内存,16MB物理内存的机器缺省配置4MB可用内存。应在Microsoft SQL Server数据库安装后进行内存选项(Memory)设置,最大配置值为2GB。
  为了确定SQL Server系统最适宜的内存需求,可以从总的物理内存中减去Windows NT4.0需要的内存以及其它一些内存需求后综合确定,理想的情况是给SQL Server分配尽可能多的内存,而不产生页面调度。
  1?根据物理内存合理规划SQL Server可用内存
  在大多数的生产环境中,服务器配备的物理内存是64MB~128MB,偶尔也有256MB的,只要配置恰当是完全可以满足SQL Server的内存需求的。下表是笔者关于SQL Server内存分配的建议规划,供参考。


物理内存 分配给SQL Server 设置值(单位:2KB)
8MB 4MB 2048
16MB 8MB 4096
32MB 16~18MB 8192~9216
48MB 28~34MB 14336~17408
64MB 40~46MB 20480~23552
128MB 100~108MB 51200~55296
256MB 216~226MB 110592~115712
512MB 464~472MB 237568~241664

  以下是SQL Server内存选项(Memory)设置方法
  (1)从Microsoft SQL Server程序集中启动SQL Enterprise Manager;
  (2)从Server Manager窗口中选择“Server”菜单选项;
  (3)在“Server”菜单中选择“Configurations”选项;
  (4)在“Server Configuration”对话框中选择”Configuration”标签,Configuration窗口显示配置选项列表;
  (5)选中“Memory”项目,在“Current”栏填入新值;
  (6)停止并重新启动SQLServer服务,使设置生效。
  2?合理扩充虚拟内存、增大SQL Server可用内存
  当SQL Server系统确实需要扩大可用内存时,应在磁盘空间充足的情况下扩充供虚拟内存,并相应增大 SQL Server可用内存。具体做法是,系统管理员首先扩充服务器的虚拟内存,然后再参考上表增大SQL Server可用内存,关键是要根据系统的负载情况综合决定是否扩充内存、优化配置。
  3?使用tempinRAM
  SQL Server使用tempdb临时数据库作为一些查询连接操作时排序或创建临时表的工作空间。将tempdb创建在RAM中可以使系统操作性能有较大提高,而且因为tempdb在每次重启动服务器时都重建,这样即使有非正常的关闭也是较为安全的,例如停电故障。要将tempdb创建在RAM中,可以使用sp_configure进行设置,具体用法请参阅有关资料。
  由于tempdbinRAM使用的内存是由系统从内存体单独分配的,与SQL Server的内存选项设置的可用内存池是分开的,使用tempdbin RAM将减少整个系统的可用内存,应根据SQL Server和服务器运行情况进行配置,否则就可能适得其反,影响系统性能。另外,适当增加tempdb数据库空间,即使不使用tempdbin RAM,也可以提高数据库的运行速度。
  4?注意事项
  (1)建议在生产环境中SQL Server不要设置小于32MB内存,而且数据库服务器上尽量不要运行其它应用程序;
  (2)扩充供虚拟内存、增大SQL Server可用内存,应考虑物理内存使用状况和磁盘空间许可情况;
  (3)在可能的情况下,要为系统留有部分额外的内存,这样在服务器上打开一个服务或添加一个进程且不改变SQL Server内存配置时,不致于使NT服务器的运行速度受到影响(变得很慢),一般认为最小为2MB最大为20MB。
四、巧用内存配置,解决统计服务器问题

  一单位的统计服务器投入使用后,运行速度较慢,经排查原因,发现SQLServer中的内存选项(Memory)仅为安装缺省值——16MB(而服务器有128MB的物理内存),在将内存值调整为100MB时却误将其改成了 1000MB,使得SQL Server服务不能启动,统计数据库打不开,也就不能再次进入SQL Enterprise Manager修改内存设置了。由于近期未备份业务数据,不到万不得已不能重装SQLServer数据库,就试图用命令行参数命令来重新启动SQL Server服务,但均不能奏效,陷入了困境。我们经过仔细分析提出:既然SQL Server可用内存设置值远远大于物理内存,造成SQLServer服务不能启动,何不扩充虚拟内存呢?经设法将机器虚拟内存扩充至1000MB并重新启动,SQL Server数据库成功启动,问题迎刃而解。

五、结束语

  目前,大多数单位投入使用的Microsoft SQL Server数据库服务器的物理内存一般都在64MB以上,如农业银行省、市分行的统计服务器配备128MB物理内存,只要按照上面提出的方法合理规划、优化NT和SQL Server的内存配置,使设置尽可能达到最优,应用系统就一定能够充分发挥设计功能、满足业务需求。□

季广胜(中国农业银行江苏省泰州市分行信息电脑中心,江苏 泰州 225300)

参 考 文 献

1,Jim Boye Windows NT 4.0 INSTALLATION& CONFIGURATION 北京:机械工业出版社,1997 7
2,Microsoft公司网络数据库系统管理 Microsoft SQL Server 6.0北京:科学出版社,1997 1

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
144#
 楼主| 发表于 2004-1-6 22:14 | 只看该作者
数据变换和转换注意事项(SQL)
作者:


使用数据转换服务 (DTS) 转变或转换异类数据和目的服务器之间的数据之前,请考虑不同程序、提供程序以及驱动程序支
持数据类型和 SQL 语句的方式的变化。

当使用 Microsoft&reg; SQL Server™ 作为数据源时,请考虑下列事项:

将 real 数据类型转换为 int 数据类型也许不能返回精确的值,因为 SQL Server 2000 只支持精确度为 6 位数字的
real 数据类型。例如,real 型数字 2147480000 可能生成 2147480065 的 int 值。


从一个文本文件将 string (DBTYPE_WSTR) 列转换为 date (DBTYPE_DATE) 或 time (DBTYPE_TIME) 列时,OLE DB 数据转
换服务组件只接受一种日期或时间格式 (yyyy-mm-dd hh:mm:ss.fffffffff)。使用日期时间字符串转换,或者使用 CDate
函数编码 Microsoft ActiveX&reg; 脚本转换正确地转换日期。


SQL Server 2000 不支持 OLE DB 类型 DBTYPE_DATE 或 DBTYPE_TIME。SQL Server 2000 只支持 DBTYPE_DATETIME。


若要通过多步骤访问数据,请避免在转换过程中使用 temp 表。应使用全局 temp 表或在 tempdb 中创建永久表。


从 temp 表返回行的存储过程不能用作转换源。可以使用存储过程从全局 temp 表或表返回行。


在转换数据任务、数据驱动的查询任务或 DTS 设计器中的执行 SQL 任务中使用临时表时,请记住:不能使用 Transact-
SQL 语句或调用 temp 表的存储过程作为源。
该限制并不应用于 DTS 设计器的外部。可使用通过编程方式访问 SQL Server temp 表的源语句或存储过程。

DTS 导入/导出向导和 DTS 设计器
当使用 DTS 导入导出向导和 DTS 设计器创建包时,请考虑以下事项:

DTS 用户界面允许共享任务中现有的连接,但是同一个连接不能既用在一个转换的源中又用在该转换的目的中。


使用 DTS 设计器或 DTS 导入/导出向导,有可能为一些只作为数据源的提供程序指定只读或正在使用状态(例如,
Microsoft Access 和 ODBC DSN )。单击"连接属性"对话框中的"高级"选项卡,然后在"高级连接属性"对话框中,将模式
属性值设置为 1。


使用 DTS 导入/导出向导或 DTS 设计器创建表时,在目的地上创建的表的所有者为当前用户(通常是 dbo),与谁是源表
的所有者无关。这将产生这种情况:dbo 试图在目的地创建一个表,而该表的名称已经存在,从而导致尝试失败。


当使用 DTS 设计器定义数据驱动的查询时,数据目的地必须能够支持 OLE DB ICommand 接口。由于这种限制,类似文本
文件的目的不被支持。


如果 text、ntext 和 image 类型的字段长度超过 8388602 字节,则 DTS 的复制 SQL Server 对象任务将截断超出的部
分。DTS 设计器或 DTS 导入/导出向导不显示任何错误信息,而是显示任务已成功完成。
唯一的失败指示是一条写入日志文件的日志消息,此文件的名称为 <server>.<database>.log,位于"复制 SQL Server 对
象任务属性"对话框的"复制"选项卡所指定的脚本文件目录中。此日志消息详细说明表和列,但不指出发生截断的行。无任
何错误记录写入 DTS 错误文件或 SQL Server 日志。

Microsoft SNA Server
当使用 Microsoft SNA Server 作为数据源时,请考虑下列事项:

AS/400 和 VSAM 的 Microsoft OLE DB 提供程序不支持 DTS 导入/导出向导用来创建或截断表的 SQL 语句。
Microsoft Access
使用 Access 时,应考虑下列事项:

当从 SQL Server 2000 中将数据导出到 Microsoft Access 97 或更早的版本中,Access 的 Microsoft OLE DB 提供程序
在内存中为所有插入设置缓冲区,并且只在 DTS 导入/导出向导完成操作时提交它们。结果是,可以在导出大量表时,面
对内存较小的形势。然而,可以通过构造在多个传递中发送较少行数的 SELECT 语句解决该问题。
Microsoft Visual FoxPro
Microsoft Visual FoxPro&reg; 只支持 numeric 数据类型的 (15,9) 精度。如果导出到 Visual FoxPro 的数据超出该精
度,则会被截断并四舍五入。

Visual FoxPro 不支持 SELECT INTO 语句。


DTS 查询设计器支持 Visual FoxPro INSERT VALUE 语句,但不支持使用 SELECT 语句的 INSERT 语句。


ODBC 的 Microsoft OLE DB 驱动程序无法使用 FoxPro ODBC 驱动程序将 BLOB 写入 Visual FoxPro,因为 Visual
FoxPro 不支持动态游标。
ODBC
当连接到 ODBC 数据源时,请考虑下列事项:

ODBC 的 Microsoft OLE DB 提供程序在执行导出操作时需要一个在带有 BLOB 数据列的所有目标表上的唯一键。


当使用带有 SQL Server ODBC 驱动程序的 ODBC 的 Microsoft OLE DB 提供程序时,在安排带有源行集中其它数据类型的
列之后安排所有 BLOB 列。可以使用 SELECT 语句重新将 BLOB 列安排到源行集的末尾。DTS 导入/导出向导自动地执行该
操作。


重要 当使用带有 SQL Server ODBC 驱动程序的 ODBC 的 Microsoft OLE DB 提供程序时,请尝试预览带有连接忙错误的
存储过程失败。如果使用 SQL Server 的 Microsoft OLE DB 提供程序,该问题就不会发生。

如果一个用于 SQL Server 的 Microsoft ODBC 驱动程序连接由多个线程共享,此连接可能会失败,并返回错误信
息"Connection is busy with results for another hstmt"(此连接正忙于其它 hstmt 的结果)。在某些情况下,这将
影响通过 DTS 导入/导出向导生成的包。使用以下方法之一解决此问题:
将 MaxConcurrentSteps 属性设置为1 以消除竞争的线程。


创建其它的 ODBC 连接以消除连接共享。


使用用于 SQL Server 的 Microsoft OLE DB 提供程序 (SQLOLEDB) 连接数据库。如果需要连接 SQL Server 6.5 数据
库,则运行 Instcatl.sql 以启用通过用于 SQL Server 的 Microsoft OLE DB 提供程序进行访问。
Oracle
当使用 Oracle 作为数据源时,请考虑以下事项:

用于 Oracle 的 Microsoft ODBC 和 OLEDB 驱动程序支持 Oracle 7.3 BLOB 数据类型,不支持 Oracle 8.0 数据类型。
例如,不支持 BLOB、CLOB、NCLOB 和 BFILE。


用于 Oracle 的 Microsoft OBDC 驱动程序不支持将 Unicode 字符串发送到 Oracle 服务器中。Oracle 要求在 Unicode
字符串前加上前缀字母 N。


用于 Oracle 的 Microsoft OBDC 驱动程序不支持 Oracle number 数据类型的负向缩放。


用于 Oracle 的 Microsoft OBDC 驱动程序报告无指定精度的 Oracle number 数据类型的长度为 20 位数字。当从
Oracle (不考虑目的)中导入时,如果有多于 20 位的数字,并且如果目的表还不存在,可能必须手工地增加精度。


在表中 Oracle 仅支持一个 LONG (BLOB) 数据列。


不能导入或导出拥有混合或小写名称的 Oracle 列。也不能通过使用 Oracle 列名称(包含使用 DTS 导入/导出向导的空
格)来转换或复制数据。Oracle 要求精确指定并引用区分大小写的列名称。


若要在 SQL Server 2000 和 Oracle 之间执行分布式事务,必须使用 Oracle 8.0.4.1 版本或更新版本。有关更多信息,
请参见分布式事务。


由于用于 Oracle 的 Microsoft OLE DB 提供程序不支持 IcommandWithParameters,所以它不能用作数据驱动的查询任务
的目的地。在 DTS 设计器中使用此提供程序时,转换数据任务、数据驱动的查询任务以及执行 SQL 任务上的"参数"按钮
将被禁用。
IBM AS/400 上的 DB2
当连接到 DB2 数据源时,请考虑以下事项:

在 AS/400 系统上不支持 Unicode 或 BLOB。


在 AS/400 服务器上不能转换任何有 NULL 列值的表,因为 AS/400 在其 CREATE TABLE 语句中不支持 NULL 语法。然
而,如果编辑 CREATE TABLE 语法以清除对 NULL 的引用时,则可以发送 NULL 值。AS/400 不支持 NOT NULL;如果没指
定就假定为 NULL。
使用 Sybase ODBC 驱动程序
当连接到一个 Sybase ODBC 数据源时,请考虑以下事项:

当使用 DTS 导入/导出向导将数据从 SQL Server 转换到 Sybase 11 版本时:
默认情况下,SQL Server numeric (3,0) 数据类型映射为 Sybase smallmoney。为避免数据丢失,请更改此设置。


默认情况下,SQL Server numeric (18,x 或 19,x) 数据类型映射为 Sybase money 数据类型。为避免数据丢失,请更改
此设置。


将数据移动到一个新的 Sybase 表时,如果单击了"列映射和转换"对话框中的"确定"按钮,向导会返回错误信息"表已存
在"。应该忽略此消息。


不能使用 DTS 导入/导出向导除去并且重新创建 Sybase 表。必须不使用向导来执行此操作。
DTS 查询设计器不支持 Sybase SQLAnywhere CREATE TABLE 语句。


由于 SQLAnywhere 驱动程序中的限制,DTS 导入/导出向导每次只能将一个表移动到 SQLAnywhere 数据库。可以使用
DTS 设计器来克服此限制。然而,因为 SQLAnywhere 驱动程序不是安全线程,所以,必须将每个表的 Step 对象的
ExecuteInMainThread 属性设置为 True。


如果表中包含 BLOB 列,则不能将此表复制到 Sybase 目的中。


如果通过编程方式从 Sybase 中复制一个包含 image 数据类型的表,则更改默认的 BLOB 设置会导致失败。
dBase 和 Paradox
当连接到 dBase 和 Paradox 数据源时,请考虑以下事项:

dBase 和 Paradox 中的表名称被限制为八个字符。dBase 中的列名称被限制为 10 个字符。
文件导入或导出
当从文本文件导入或导出数据时,请考虑以下事项:

在 char 或 varchar 列中导入或导出数据时,如果客户端 OEM 代码页与服务器上的代码页不同,则某些扩展字符可能不
被复制。在 nchar 或 nvarchar 列中导入或导出数据时,所有字符均能正确复制。


如果将 BLOB(包括 SQL Server 的 text 和 ntext 数据类型)列导出到固定长度的文本字段中,则将默认长度设置为
BLBO 字段的最大长度(大约 2GB)。通过选择较小的但足够的字段长度来防止磁盘溢出,或者在可能的时候使用分隔格
式。


DTS 中使用的用于文本文件的 OLE DB 提供程序不能处理超过两兆字节 (MB) 的 BLOB 数据列。
代码页、排序规则和非 Unicode 数据问题
使用 DTS 在具有不同代码页和排序规则的 SQL Server 数据库间复制数据时,数据可能会丢失或转换不正确。

为避免出现转换问题,应以 Unicode 形式存储国际数据。一旦转换为 Unicode 后,便可很容易地将任何排序规则或代码
页中的数据传送到任何 Microsoft SQL Server 2000 或 Microsoft SQL Server 7.0 数据库,而不会出现数据丢失或转换
不正确这类问题。

在 Microsoft SQL Server 2000 中,排序规则与具体的代码页相关联并被指派给各个列。(Microsoft SQL Server 7.0
使用单个的默认代码页且不支持列级排序规则)。如果用于源列和目的列的代码页匹配,则非 Unicode 列不会发生数据丢
失。在非 Unicode 列间复制数据时,如果源列与目的列不匹配,则将发生数据丢失。在某些情况下,DTS 执行最佳的匹配
映射。如果源代码页包含的字符在目的代码页中未出现,则将发生数据丢失。此外,DTS 执行复制时不需要任何转换干
预,这将导致在两个代码页中不是由同一个二进制值表示的数据丢失。下面的问题及准则分别针对使用复制 SQL Server
对象任务的情况,和使用复制列转换在不同排序规则或代码页之间复制数据的情况。

复制 SQL Server 对象任务
下面论述复制 SQL Server 对象任务如何处理非 Unicode 数据:

在 SQL Server 2000 实例间复制数据时,只要设置复制 SQL Server 对象任务的 UseCollation 属性,便不会发生数据丢
失。


将数据从 SQL Server 2000 实例复制到 SQL Server 7.0 时,对于具有与数据库默认排序规则代码页相匹配的排序规则的
列,使用最佳匹配映射。而具有不同代码页的列中所存储的数据,则被解释为正在用默认代码页进行编码处理,转换过程
中将伴随数据丢失。


将数据从 SQL Server 7.0 复制到SQL Server 2000 实例时,由于 SQL Server 7.0 无法确定其默认代码页所映射的排序
规则,UseCollation 属性不可用。执行复制 SQL Server 对象任务期间不支持任何排序规则,因此,将给非 Unicode 目
的列指派目的数据库的默认排序规则。如果与此排序规则相关联的代码页与源数据库的代码页不匹配,DTS 将执行最佳匹
配映射。


将数据从 SQL Server 7.0 复制到 SQL Server 7.0 时,如果源数据库和目的数据库使用不同的默认代码页,DTS 将执行
最佳匹配映射。
若要确保复制非 Unicode 时不发生数据丢失,可使用 SQL Server 大容量复制功能以 Unicode 格式导出数据,然后使用
大容量复制或 DTS 导入数据。

若要禁用默认排序规则脚本,请添加代码或使用脱接编辑或动态属性任务将 SQLDMOScript2_70Only 的值添加到复制 SQL
Server 对象任务的 ScriptOptionEx 属性中。

复制列转换
下面论述复制列转换如何在不同代码页之间处理非 Unicode 数据:

如果源列为 Unicode 而目的列为非 Unicode,则执行最佳匹配映射,并尝试在源列和目的列之间转换数据。


如果源列为非 Unicode 而目的列为 Unicode,则不论实际使用的代码页是什么,DTS 都将源列视为属于代码页 1252。


如果源列和目的列都为非 Unicode,原始数据不经转换即被复制,将发生部分数据丢失。

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
145#
 楼主| 发表于 2004-1-6 22:14 | 只看该作者
SQL Server 2000 与 SQL Server 7.0 版兼容性问题
作者:


Microsoft&reg; SQL Server™ 2000 与 SQL Server 7.0 在大多数方面是兼容的。这部分描述从 SQL Server 7.0 升级到
SQL Server 2000 时的向后兼容性问题:

客户端网络实用工具和命名实例


多服务器作业和命名实例


升级 SQL Server 6.5 客户端软件


身份验证模式


在远程表上所执行操作的 ROWCOUNT 设置


服务器配置选项


恢复模型和数据库选项


保留关键字


SQL 事件探查器扩展存储过程


SQL 查询分析器中的默认连接选项设置


bcp 实用工具


来自早期版本可视化数据库设计工具的数据库关系图


数据转换服务


指定信任连接


SQL-DMO 中的扩展对象


SQL-SCM


English Query 和 SQL Server 7.0 OLAP 服务
客户端网络实用工具和命名实例
当使用来自 SQL Server 7.0 或其早期版本的 SQL Server 客户端连接组件时,在连接到 SQL Server 2000 的命名实例之
前,必须使用客户端网络实用工具设置别名。例如,若要在 SQL Server 7.0 客户端上连接 SQL Server 2000 命名实例,
必须添加指向 \\computername\pipe\MSSQL$instancename\sql\query 的别名。如果使用别名
computername\instancename,客户端可按 SQL Server 2000 客户端所做的那样,通过指定该别名进行连接。对于
TCP/IP 套接字和 NWLink IPX/SPX Net-Library,则必须使用客户端网络实用工具在客户端定义别名,该客户端指定了端
口地址,在该端口地址上可以监听命名实例。

多服务器作业和命名实例
当使用主服务器和目标服务器时,SQL Server 7.0 不能与 SQL Server 2000 命名实例相互操作。若想一起使用 SQL
Server 7.0 实例和 SQL Server 2000 实例以进行 MSX/TSX 操作,必须使用 SQL Server 2000 的默认实例而不是其命名
实例。

升级 SQL Server 6.5 客户端软件
当在服务器上运行 SQL Server 6.5 版实例时,适用于下列问题:

若想从 SQL Server 6.5 客户端软件升级到 SQL Server 2000 客户端软件,并且有使用默认 Net-Library 的应用程序,
则必须使用客户端网络实用工具使命名管道或多协议作为默认 Net-Library,才能进行 Windows 身份验证连接。

身份验证模式
SQL Server 2000 可以在两种安全(身份验证)模式下运行:

Windows 身份验证模式(Windows 身份验证)


混合模式(Windows 身份验证和 SQL Server 身份验证)
混合模式允许用户使用 Windows 身份验证或 SQL Server 身份验证进行连接。通过 Microsoft Windows NT&reg; 4.0 或
Windows 2000 用户帐户连接的用户可以在 Windows 身份验证模式或混合模式下使用信任连接(由 Windows NT 4.0 或
Windows 2000 验证的连接)。

提供 SQL Server 身份验证是为了向后兼容。SQL Server 身份验证的一个例子是:创建单个 Microsoft Windows&reg; 2000
组,将所有必要的用户添加到该组中,然后授于这个 Windows 2000 组登录 SQL Server 及访问任何所需数据库的权限。

在远程表上所执行操作的 ROWCOUNT 设置
当将数据库兼容级别设置成 80 时,在 SQL Server 2000 中的远程表上执行的 INSERT 语句不支持 ROWCOUNT。对于这些
INSERT 操作,将忽略 SET ROWCOUNT 选项。

SQL Server 7.0 支持在远程表上执行的 INSERT 语句的 ROWCOUNT 设置。

服务器配置选项
SQL Server 2000 不支持下列服务器配置选项。

default sortorder id resource timeout
extended memory size spin counter
language in cache time slice
language neutral full-text unicode comparison style
max async IO unicode locale id


有关配置选项的更多信息,请参见设置配置选项和 sp_configure。

恢复模型和数据库选项
Microsoft&reg; SQL Server™ 2000 提供下列恢复模型,用以简化恢复计划、简化备份和恢复过程以及阐明系统操作要求之间
的折衷:

简单恢复


完全恢复


大容量日志记录恢复
每一个模型都针对性能、磁盘和磁带空间以及保护数据丢失的不同需要。

在 SQL Server 7.0 和早期版本中,通过 trunc. log on chkpt 和 select into/bulkcopy 数据库选项的组合设置来提供
类似的功能。trunc. log on chkpt 和 select into/bulkcopy 数据库选项可通过使用 sp_dboption 存储过程来设置。

下表将 trunc. log on chkpt 和 select into/bulkcopy 的设置映射到新恢复模型。


如果 trunc. log on chkpt 是: 且 select into/bulkcopy 是:
则恢复模型是:
FALSE FALSE FULL
FALSE TRUE BULK-LOGGED
TRUE TRUE SIMPLE
TRUE FALSE SIMPLE



说明 如果升级某个数据库,而此数据库中的 trunc. log on chkpt 和 select into/bulkcopy 选项设置为真,select
into/bulkcopy 设置为假,则强制此数据库为简单恢复模型。


为保持向后兼容,SQL Sever 2000 支持 trunc. log on chkpt 和 select into/bulkcopy 数据库选项,但在以后的版本
中可能不再支持。

在 SQL Server 2000 中,ALTER DATABASE Transact-SQL 语句提供 SET 子句用以指定数据库选项,包括恢复模型。有关
数据库选项的更多信息,请参见设置数据库选项和 ALTER DATABASE。

保留关键字
在 SQL Server 2000 中,这些关键字不再是保留关键字:AVG、COMMITTED、CONFIRM、CONTROLROW、COUNT、ERROREXIT、
FLOPPY、ISOLATION、LEVEL、MAX、MIN、MIRROREXIT、ONCE、ONLY、PERM、PERMANENT、PIPE、PREPARE、PRIVILEGES、
REPEATABLE、SERIALIZABLE、SUM、TAPE、TEMP、TEMPORARY、UNCOMMITTED、WORK。

在 SQL Server 2000 中,这些关键字是保留关键字:COLLATE、FUNCTION、OPENXML。

SQL 事件探查器扩展存储过程
在 SQL Server 2000 中不支持 SQL 事件探查器扩展存储过程,如 xp_trace_addnewqueue 和
xp_trace_generate_event。它们由一组新存储过程和系统用户定义函数替换。有关更多信息,请参见创建并管理跟踪和模
板。

SQL 查询分析器中的默认连接选项设置
在 SQL Server 7.0 版及其早期版本中,SQL 查询分析器中 SET QUOTED_IDENTIFIER 的默认设置为 OFF。在 SQL Server
2000 中,SQL 查询分析器中的默认设置为 ON,这也是 ODBC 和 OLE DB 的默认设置。此外,SQL Server 2000 中的许多
新特性(如索引视图和计算列上的索引)都要求该选项为 ON。


说明 当 QUOTED_IDENTIFIER 设置为 ON 时,如果对字符串使用双引号,则将收到语法错误。


bcp 实用工具
若要在 SQL Server 2000 中读取由 DB-Library bcp 的早期版本创建的字符文件,请使用 -V 开关。有关更多信息,请参
见 bcp 实用工具。

来自早期版本可视化数据库设计工具的数据库关系图
对于拥有使用早期版本可视化数据库设计工具创建的数据库关系图的用户:

如果在 SQL Server 2000 数据库上使用的第一个可视化数据库工具的版本比 SQL Server 2000 中的工具早,则 SQL
Server 企业管理器不能在该数据库中打开或创建数据库关系图。任何这种尝试都将导致错误:
ODBC error: [Microsoft][ODBC SQL Server Driver][SQL Server]Could not find stored
procedure 'dbo.dt_getobjwithprop_u'.

有几种可将数据库置于这种状态的可视化数据库工具。这些工具包括在 SQL Sever 7.0 及其早期版本中的查询设计器、视
图设计器、数据库设计器和表设计器,以及许多用于枚举数据库对象的工具。在 Microsoft Access 2000 和 Microsoft
Visual Studio&reg; 6 中也有这些工具。

在数据库上运行下列脚本将使 SQL Server 企业管理器可以处理该数据库中的数据库关系图:

alter table dbo.dtproperties add uvalue nvarchar(255) null
go
if exists(select * from dbo.dtproperties) exec('update dbo.dtproperties set uvalue = convert(nvarchar
(255), value)')
go

该脚本运行后,SQL Sever 2000 中的 SQL Sever 企业管理器和可视化数据库工具的早期版本都可以访问该数据库中的数
据库关系图。当对 SQL Server 2000 数据库使用数据库工具的早期版本时,还要考虑其它问题。有关更多信息,请参见
SQL Server 2000 的硬件和软件安装要求。

数据转换服务
以下是数据转换服务 (DTS) 的向后兼容性问题。

扩展 DTS 对象
数据转换服务 (DTS) 中的某些对象在 SQL Server 2000 中得到了扩展。 有关在 SQL Server 7.0 及其早期版本中使用新
的数据转换服务对象、方法及属性的更多信息,请参见扩展 DTS 对象。

复制 SQL Server 对象任务
当在 SQL Server 2000 和 SQL Server 7.0 的实例之间复制数据库对象时,在使用复制 SQL Server 对象任务
(Microsoft SQL Server 7.0 版中的传输 SQL Server 对象任务)上有限制。有关更多信息,请参见复制 SQL Server 对
象任务。

在 SQL Server 7.0 或其早期版本上运行 DTS 包
在 SQL Server 2000 的实例上创建的 DTS 包不能装载到或运行于 SQL Server 7.0 版(或早期版本)的实例上。如果试
图这么做,则可能会收到下面消息中的一个:

"无效的类字符串。"


"参数不正确。"
两条消息都指明:当前的服务器并不包含用于装载该包所必须的所有组件,并且不能支持在 DTS 包中所定义的对象(例如
任务及转换)。

但是,如果收到这两条消息中的一条,仍然可以在 SQL Server 2000 实例上打开并运行包。

使用具有不同的排序规则、不同的代码页和非 Unicode 数据的 DTS
当使用复制 SQL Server 对象任务和复制列转换在 Microsoft SQL Server 2000 和 Microsoft SQL Server 7.0 实例之间
复制非 Unicode 数据时,使用不同的代码页和排序规则会出现问题。有关更多信息,请参见数据变换和转换注意事项。

指定信任连接
在 SQL Server 7.0 中,不必在连接字符串中为 ADO、OLE DB 或 ODBC 编写"trusted_connection=yes"代码即可获得信任
连接。如果未指定 UID 和PASSWORD,SQL Server 将默认为尝试信任连接。而在 SQL Server 2000 中,必须编
写"trusted_connection=yes"代码才能获得信任连接。

SQL-DMO 中的扩展对象
SQL-DMO 中的某些对象在 SQL Server 2000 中得到了扩展。有关在 SQL Server 7.0 或其早期版本中使用扩展 SQL-DMO
对象、方法及属性的更多信息,请参见扩展 SQL-DMO 对象程序设计。

SQL-SCM
SQL-SCM(服务控制管理器)API 已删除,不再受到支持。

English Query 和 SQL Server 7.0 OLAP 服务
对于想要安装或卸载 English Query 的SQL Sever 7.0 OLAP 服务的用户,将会发生下列问题:

在安装期间必须停止运行 SQL Sever 7.0 OLAP 服务。在安装 English Query 之前必须关闭 OLAP 服务。(请参见"控制
面板"中的"服务"应用程序。)


如果已安装了 SQL Server 7.0 OLAP 服务并且卸载 English Query,则必须重新安装 OLAP 服务。相反,如果已安装了
English Query 并且卸载 OLAP 服务,则必须重新安装 English Query 以维护 OLAP 连通性。
在 SQL Server 2000 Analysis Services(即以前的 OLAP Services)中不会发生上述问题。

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
146#
 楼主| 发表于 2004-1-6 22:16 | 只看该作者
利用 Case 敘述做 SQL 的動態排列
作者:东方蜘蛛(转)


SQL Server 在讀取資料時是採用隨機的方式, 所以使用者會用 Order 子句來做資料排列, 在這篇文章當中咱叨要來進一步介紹按怎使用 Case 來做動態的排列

Order By 子句

咱先來看麥一般使用 Select 的結果, 在這篇文章的例咱會使用 SQL Server 的北風資料庫, 請打開 Query Analyzer, 執行

Use Northwind
Go
Select CompanyName, ContactName, ContactTitle
From Customers

執行的結果可能是按照資料輸入的時間來排列, 哪是你要照自己的規則來排, 你叨需要用到 Order By 子句, 譬如講前一個例, 你哪是要照公司名來排叨要按呢做

Select CompanyName, ContactName, ContactTitle
From Customers
Order By CompanyName

Case 敘述

Case 敘述適用來控制程式的流向, 所以咱叨要利用 Case 敘述來做 T-SQL 的邏輯控制, 來看麥 Case 的語法

Case <input expression>
When <when expression> Then <result expression>
[...n]
[Else <result expression>]

光看語法不夠, 現在用一個例來學練一下, 同款地咱還是用北風資料庫, 假設咱們要將職員 (Employees) 資料表中的英文稱呼改做台灣式, 可以按呢做

select FirstName, TitleOfCourtesy, CourtesyInTC =
Case TitleOfCourtesy
When 'Ms.' Then '水姑娘'
When 'Dr.' Then '博士博'
When 'Mr.' Then '先仔'
When 'Mrs.' Then '女士'
Else '先生/小姐'
End
From employees

動態排列

了解了基本語法後咱們就可以開始學習按怎利用 Order By 加上 Case 敘述來做動態的資料排列

Declare @OrderKey TinyInt
Set @OrderKey = 2

Select CompanyName, ContactName, ContactTitle
From Customers
Order By Case
When @OrderKey = 1 Then CompanyName
When @OrderKey = 2 Then ContactName
Else ContactTitle
End

不過這親像還不太實用, 至少在 ASP 中, 所以接下來咱來做一個預儲程序

Create Procedure sp_SelectCustomersDynamicOrder
@OrderKey = Null
As
Select CompanyName, ContactName, ContactTitle
From Customers
Order By Case
When @OrderKey = 1 Then CompanyName
When @OrderKey = 2 Then ContactName
Else ContactTitle
End

現在你就可以在直接呼叫這個 Stored Procedure

exec sp_SelectCustomersDynamicOrder
exec sp_SelectCustomersDynamicOrder 1
exec sp_SelectCustomersDynamicOrder 2

按呢是不是友善多了

希望這篇文章對你有幫助!

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
147#
 楼主| 发表于 2004-1-6 22:16 | 只看该作者
在SQL Server的存储过程中调用Com组件
作者:风之彩


SQL server 的 T-Sql 语言的功能是 非常的强大,但是有个时候 也确实是有些限制和不方便,为什么不象 asp 一样 大量的借用组件呢?开始在 Sql online book 中查找,终于找到了 一个 Sql 的 系统存储过程 sp_OACreate,下面大家就一起去 看看这个 存储过程的神气之处吧

s首先我们先用VB 作一个最简单的组件 ,因为是介绍性的文章,所以这个组件是非常的的简单,在具体的
工作中,可以写个 比这个 业务复杂的多的 组件
Project Name: testSQLCOM
Class Name: TestMath
Public Function AddMe(a As Long, b As Long) As Long
AddMe = a + b
End Function
编译生成后,我们就可以在 Sql Server 中对这个 Com 组件进行调用了
declare @i int
declare @intRet int
declare @intRetCode int
DECLARE @strErr varchar (255)
DECLARE @strErr1 varchar (255)
/* 首先创建Com 实例 */
exec @ret_code = sp_OACreate "testSQLCOM.TestMath", @i out
IF @intRetCode <> 0
BEGIN
/* 创建实例 失败 */
EXEC sp_OAGetErrorInfo @i, @strErr OUT, @strErr1 OUT
PRINT "创建实例失败,失败的原因是:: " + @strErr + " " + @strErr1
RETURN
END

/* 创建成功,开始调用 */
EXEC @intRetCode = sp_OAMethod @i,'AddMe',@ret OUT,100,200
IF @intRetCode <> 0
BEGIN
/* 调用方法出错 */
EXEC sp_OAGetErrorInfo @i, @strErr OUT, @strErr1 OUT
PRINT "调用方法失败,失败的原因是:: " + @strErr + " " + @strErr1
EXEC sp_OADestroy @i
RETURN
END
PRINT "返回的结果是" + Str(@intRet)
exec sp_OADestroy @i

以前是存储过程的输出

Step 4:
返回的结果是 300

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
148#
 楼主| 发表于 2004-1-6 22:17 | 只看该作者
分布式查询和分布式事务
作者:


Microsoft&reg; SQL Server™ 允许创建与称为链接服务器的 OLE DB 数据源的链接。在链接到 OLE DB 数据源之后,可以:

从 OLE DB 数据源引用行集,作为 Transact-SQL 语句中的表。


将命令传递给 OLE DB 数据源,并包含结果行集,作为 Transact-SQL 语句中的表。
每个分布式查询都可以引用多个链接的服务器,而且可以对每个链接的服务器分别执行更新或读取操作。单个分布式查询
可以对某些链接的服务器执行读取操作,并且对其它链接的服务器执行更新操作。通常情况下,每当某个事务可能更新多
个链接服务器中的数据时,Microsoft SQL Server 都要求相应的 OLE DB 提供程序支持分布式事务。因此,链接服务器上
所支持的查询类型取决于 OLE DB 提供程序中对事务的支持级别。OLE DB 为事务管理定义了两个可选的接口:

ITransactionLocal 支持 OLE DB 数据源中的本地事务。


ITransactionJoin 允许提供程序联结包含其它资源管理器的分布式事务。
所有支持 ITransactionJoin 的提供程序也都支持 ITransactionLocal。

如果在连接是自动提交模式时执行分布式查询,则应用以下规则:

对于不支持 ItransactionLocal 的提供程序,只允许执行读取操作。


对于支持 ITransactionLocal 的提供程序,允许执行所有更新操作。
主控 SQL Server 会自动调用每个参与更新操作的链接的服务器中的 ITransactionLocal,以启动本地事务,并在语句执
行成功时提交或在语句执行失败时回滚。

如果分布式查询是针对分布式分区视图或者是在连接为显式或隐性事务时执行,则应用下列规则:

对于不支持 ITransactionJoin 的提供程序,只允许执行读取操作。不支持任何事务或只支持 ITransactionLocal 的提供
程序不能参与更新操作。


如果 SET XACT_ABORT 设置为 ON,则对于支持 ITransactionJoin 的任意提供程序都允许执行所有的更新操作。主控
SQL Server 会自动调用每个参与更新操作的链接服务器中的 ITransactionJoin,以便在分布式事务中登记该服务器。然
后当主控服务器表示要提交或回滚事务时,MS DTC 将提交或者回滚。


如果 SET XACT_ABORT 设置为 OFF,则链接服务器还必须支持嵌套事务,才能对其执行更新操作。当会话已经有一个现有
事务时,如果提供程序支持调用 ITransactionLocal::StartTransaction,则支持嵌套事务。这使 SQL Server 得以回滚
分布式查询中的单个语句,而不是回滚整个事务。
上述规则意味着提供程序的下列限制不支持嵌套事务:仅在 XACT_ABORT 选项设置为 ON 时,分布式事务中才允许更新操
作。

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
149#
 楼主| 发表于 2004-1-6 22:17 | 只看该作者
使用SQL Server 7.0建立一个安全的数据库的最好方法是什么?
作者:阿龙


永远不要给用户直接访问表的权限。如果你希望让用户使用交互式工具如Microsoft Acess 2000来访问数据库,可以只给他们访问视图和存储过程的权限,而不是对表的直接访问权限。如果存储过程的拥有者是“dbo”,而且存储过程所引用的表和视图的拥有者也都是“dbo”,给予用户对存储过程的执行(EXECUTE)权限就足够了。这样就根本不用检查对表的访问权限了。

你还可以使用其它安全特性,比如通过在存储过程中加入商业逻辑来控制哪些字段或行能够被访问。视图是阻止用户直接访问表的另一种途径。与存储过程的区别是,你可以为视图授予SELECT、INSERT、UPDATE或DELETE权限,而存储过程则只能授予EXECUTE权限。

还有一件需要注意的事情是,如果你在另外一个数据库中执行SELECT语句,数据库对象拥有者的的链式关系仍然适用。比如说,在由SQL Server登录名“sa”所拥有的pubs数据库中,你就不能执行跨表查询连接至被一个NT登录名所拥有的数据库中,即使两个登录名都是“sysadmin”角色的成员。如果你希望连接来自3个不同数据库的表,那么这3个数据库的拥有者应该是同一个帐号。如果需要的话你可以使用存储过程“sp_changedbowner”来改变数据库的拥有者。

使用道具 举报

回复
求职 : 系统分析师
论坛徽章:
691
博彩大赢家
日期:2014-07-14 11:41:47博彩大赢家
日期:2015-09-24 12:11:05菠菜神灯
日期:2016-04-18 13:59:20NBA季后赛大富翁
日期:2016-04-27 11:51:10NBA季后赛大富翁
日期:2016-06-24 10:29:08芝加哥公牛
日期:2015-06-25 09:32:08芝加哥公牛
日期:2016-04-18 14:22:33芝加哥公牛
日期:2016-10-27 14:28:54芝加哥公牛
日期:2016-12-27 14:16:24芝加哥公牛
日期:2017-04-18 17:07:58
150#
 楼主| 发表于 2004-1-6 22:18 | 只看该作者
SQL Server同Exchange Server结合应用--SQL Mail2
作者:铁道出版社


本段文章节选自铁道出版社新出的《用BackOffice建立Intranet/Extranet应用》一书(现已在各书店有售。如海淀图书城、西单图书大厦等。外地或者需要送货上门的读者可以到www.wanbook.com.cn或www.e-booksh ... 件和协作系统、用SQL Server建立Web数据库应用、用Proxy Server建立同Internet安全可靠的连接、用Media Server建立网络电视台/广播站、用Chart server建立功能强大的聊天室、用Site Server建立个性化的邮件列表和分析网站的访问情况、用Commerce Server建立B2B或B2C的电子商务网站。此外本书还对网络的安全性进行了讨论,从而指导您建立一个更为健壮和安全的网络应用。阅读本书之后,您将发现实现丰富多彩的网络应用原来这样简单……
绝对原创,欢迎转载。但请务必保留以上文字。

6.7.2. 通过SQL Mial发送邮件
SQL Mail会在两种情况之下发送邮件。一种是当系统发生警报时间时,会向预先为警报定义的操作员发送警报信息邮件(我们将在下一节中对此问题做详细的讨论)。另一种是通过扩展存贮过程xp_sendmail来发送邮件。如果我们想要在SQL Server应用中完成发送邮件功能的话,就需要使用此存贮过程。它的语法结构如下:
xp_sendmail {[@recipients =] 'recipients [;...n]'}
[,][@message =] 'message']
[,][@query =] 'query']
[,][@attachments =] attachments]
[,][@copy_recipients =] 'copy_recipients [;...n]'
[,][@blind_copy_recipients =] 'blind_copy_recipients [;...n]'
[,][@subject =] 'subject']
[,[@type =] 'type']
[,][@attach_results =] 'attach_value']
[,][@no_output =] 'output_value']
[,][@no_header =] 'header_value']
[,][@width =] width]
[,][@separator =] 'separator']
[,][@echo_error =] 'echo_value']
[,][@set_user =] 'user']
[,][@dbuse =] 'database']
其中各参数的含义分别如下:
■ recipients:为邮件指定的接收人,可以同时将邮件发给多个用户。各用户的邮件地址用分号分割。此参数必须指定,而其他参数都为可选参数。
■ message:邮件中的信息,其最长不得超过7990字节。
■ query:一段SQL语句,其结果集将附在邮件之中。它的长度不得超过8000字节。
■ attachments:用来指定一个文件作为被发送邮件的附件。
■ copy_recipients:用来指定此邮件抄送到哪些用户。即我们在邮件程序中常见的CC to:功能。
■ blind_copy_recipients:功能同上个参数。不过不同的是,邮件之中将不会包含这些收件人的地址信息。即我们在邮件程序中常见的密送BCC to:功能。
■ subject:邮件的标题。如果不指明,默认为"SQL Server Message"。
■ type:指定邮件的MAPI类型。默认为空值。
■ attach_results:指明是否将SQL语句的执行结果作为一个附件进行发送。其取值为TRUE或FALSE。默认值为FALSE。
■ no_output:指明此发送将不返回信息到SQL 客户端。其取值为TRUE或FALSE。默认值为FALSE。
■ no_header:指明不将SQL语句执行结果中的字段名包含在邮件之中。其取值为TRUE或FALSE。默认值为FALSE。
■ width:指定SQL语句执行结果的行宽。省缺宽度为80个字符这样可能会造成一些结果行被从中间截断的现象。将行宽设大一些可以有效地防止此现象。
■ separator:指定SQL语句的执行结果进行字段分割的字符。这样会方便一些电子表格应用程序读取结果集。
■ echo_error:指明是否包含系统错误信息。其取值为TRUE或FALSE。默认值为TRUE。
■ set_user:指明执行SQL语句的用户,默认为guest。此参数所指定的用户应该在master数据库中存在。
■ dbuse:指明SQL语句在哪个数据库上执行,默认为set_user指定的用户的省缺数据库。
下面的例子将把1999年12月1日的所有刊载的文章的题目发送给邮件地址为zw@cbb.com的用户。
exec master.dbo.xp_sendmail
@recipients ='zw@cbb.com',
@message ='1999年12月1日刊载文章题目' ,
@query = 'select timu
from test.dbo.gaojian
where datepart(yy,riqi)=datepart(yy,convert(datetime,''1999-12-01')) and datepart(dy,riqi)=datepart(dy,convert(datetime,''1999-12-01''))
order by banmian' ,
@subject ='test',
@attach_results = 'true',
@width =60,
@separator = ',' ,
@set_user ='dbo',
@dbuse = 'test'
zw用户收到的邮件附件文件的内容如下:
Timu ,
----------------------------------------------------------------------------------------
测试信息1 ,
测试信息2 ,
测试信息3 ,

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表