远程管理sqlserver的注册方法数据库教程

时间:2022年12月25日

/

来源:啦啦啦相信米

/

编辑:本站小编

收藏本文

下载本文

下面是小编整理的远程管理sqlserver的注册方法数据库教程,本文共10篇,欢迎大家阅读分享借鉴,希望对大家有所帮助。本文原稿由网友“啦啦啦相信米”提供。

篇1:远程管理sqlserver的注册方法数据库教程

server|sqlserver

如果是在同一个局域网内的数据库可以直接操作第二个步骤它会自动搜索到局域网内的所以sqlserver数据库

但是如果是在不同局域网内的数据库就需要通过ip来访问步骤如下:

1、点击开始 -- 程序 -- Microsoft SQL Server -- 客户端网络实用工具 -- 另名 -- 点击添加 --- 网络库选取TCP/IP;服务器别名:数据库服务器的IP;服务器名称:数据库服务器的IP;端口默认1433(查清远程的端口是什么!) -- 确定

2、点击开始 -- 程序 -- Microsoft SQL Server -- 企业管理器 -- Mouse点 Microsoft SQL Servers -- mouse右键点 Sql Server 组;点新的sql server 注册.... -- 下一步 -- 增加主机IP,下一步---选“系统管理员给我分配的SQL Server登录信息....”. ,

远程管理sqlserver的注册方法数据库教程

。。。。。

篇2:远程管理SQL数据的方法数据库教程

数据

1、在的你计算机上安装sql server数据库的软件(注意:相同版本的数据库系统)

2、点击开始 -- 程序 -- Microsoft SQL Server -- 客户端网络实用工具 -- 另名 -- 点击添加 --- 网络库选取TCP/IP;服务器别名:数据库服务器的IP;服务器名称:数据库服务器的IP;端口默认1433 -- 确定

3、点击开始 -- 程序 -- Microsoft SQL Server -- 企业管理器 -- Mouse点 Microsoft SQL Servers -- mouse右键点 Sql Server 组;点新的sql server 注册.... -- 下一步 -- 增加主机IP,下一步---选“系统管理员给我分配的SQL Server登录信息....”.

下一步 -- 登录名:用户名、密码:密码、下一步 -- ……

4、联接成功后;请您找到您的数据库;你就可管理你的数据库,

注:不要越权。一般情况下你是只能看到别的数据库的名称而没有管理权限

---------------------------------------------------------------------

一.设置客户端网络实用工具

点击“开始”-“程序”,在“Microsoft SQL Server”菜单中选择“客户端网络实用工具”,

在“别名”选项中点击“添加”。

在“服务器别名”中,填入您网站域名,在“网络库”区域中点击“TCP/IP”,在“连接参数”区域取消“动态决定端口”,指定“端口号”为2433。填写完毕后,点击“确定”按钮保存配置。

二.企业管理器的使用

点击“开始”-“程序”,在“Microsoft SQL Server”菜单中打开“企业管理器”。在企业管理器中,右键单击“SQL Server组”,选择“新建SQL Server注册”。

此时会出现SQL Server属性窗口,在“服务器”中填入您网站的域名,选择“使用SQL Server身份验证”,“登录名”和“密码”分别填入主机开通邮件中的用户名和密码,然后点击“确定”。

连接成功后,你会看到“SQL Server组”中多了一个名称为您网站域名的服务器。此时,您就可以像操作本地SQL数据库一样管理网站数据库了。

注意事项

如果连接的时候出现超时错误,更改超时时间即可,方法是点击“工具”-“选项”。

在属性窗口中选择“高级”选项卡,将“登录超时”的数值设置为0。

篇3:win 安装 sqlserver 的方法数据库教程

复制代码代码如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion]

“ProductId”=“69713-640-9722366-45198”

[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion]

“CurrentBuild”=“1.511.1 (Obsolete data - do not use)”

“InstallDate”=dword:3f6c976d

“ProductName”=“Microsoft Windows Server 2003”

“RegDone”=“”

“SoftwareType”=“SYSTEM”

“CurrentVersion”=“5.2”

“CurrentBuildNumber”=“3790”

“BuildLab”=“3790.srv03_rtm.030324-2048”

“CurrentType”=“Uniprocessor Free”

“ProductId”=“69713-640-9722366-45198”

“DigitalProductId”=hex:a4,00,00,00,03,00,00,00,36,39,37,31,33,2d,36,34,30,2d,\\

39,37,32,32,33,36,36,2d,34,35,31,39,38,00,5a,00,00,00,41,32,32,2d,30,30,30,\\

30,31,00,00,00,00,00,00,00,00,e5,3f,e9,6a,2c,ed,25,35,12,ec,11,c9,8d,01,00,\\

00,00,00,00,37,03,6d,3f,44,22,06,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\\

00,00,00,00,00,00,00,00,00,00,00,31,32,32,32,30,00,00,00,00,00,00,00,dc,0f,\\

00,00,bf,4a,94,6c,80,00,00,00,15,18,00,00,00,00,00,00,00,00,00,00,00,00,00,\\

00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,34,79,ca,d7

“LicenseInfo”=hex:71,84,c7,56,a0,d6,10,6e,70,b4,9f,e9,10,1a,1e,7a,01,a4,41,09,\\

25,20,0e,80,83,80,1f,31,27,86,64,1f,31,dc,22,af,f7,7d,aa,e4,2a,b9,e5,e3,6c,\\

e2,01,69,85,70,91,be,a7,9f,95,e5

篇4:sqlserver 如何创建分区表数据库教程

server|sqlserver|创建

该文详细介绍实现分区表的过程以及有助于完成此过程的功能,

sqlserver 2005 如何创建分区表数据库教程

。逻辑流程如下:

图:创建分区表或索引的步骤

确定是否应为对象分区

虽然分区可以带来众多的好处,但也增加了实现对象的管理费用和复杂性,这可能是得不偿失的。尤其是,您可能不需要为较小的表或目前满足性能和维护要求的表分区。前面提到的销售方案使用分区减轻了移动行和数据的负担,但在决定是否实现分区时,您应考虑您的方案是否存在这种负担。

确定分区键和分区数

如果您正在尝试改善大型数据子集的性能和可管理性,并且已经定义了访问模式,则可以使用范围分区减少数据争用的情况,同时减少只读数据不需要分区时的维护工作。要确定分区数,应先评估您的数据中是否存在逻辑分组和模式。如果您通常一次只处理这些已定义子集中的少数几个,则应定义范围以隔离查询,使其只处理相应的数据(即,只处理特定的分区)。

确定是否应使用多个文件组

为了有助于优化性能和维护,应使用文件组分离数据。文件组的数目一定程度上由硬件资源决定:一般情况下,文件组数最好与分区数相同,并且这些文件组通常位于不同的磁盘上。但是,这主要适用于打算对整个数据集进行分析的系统。如果您有多个 CPU,SQL Server 则可以并行处理多个分区,从而大大缩短处理大量复杂报表和分析的总体时间。这种情况下,可以获得并行处理以及在分区表中移入和移出分区的好处。

创建文件组

如果需要为多个文件放置一个分区表以获得更好的 I/O平衡,则至少需要创建一个文件组。文件组可以由一个或多个文件构成,而每个分区必须映射到一个文件组。一个文件组可以由多个分区使用,但是为了更好地管理数据(例如,为了获得更精确的备份控制),应该对分区表进行设计,以便只有相关数据或逻辑分组的数据位于同一个文件组中。使用 ALTER DATABASE,可以添加逻辑文件组名,然后添加文件。要为 AdventureWorks 数据库创建名为 Q3 的文件组,请按以下方式使用 ALTER DATABASE:

ALTER DATABASE AdventureWorks ADD FILEGROUP [2003Q3]

创建文件组后,使用 ALTER DATABASE 将文件添加到该文件组中。

ALTER DATABASE AdventureWorks

ADD FILE

(NAME = N'2003Q3',

FILENAME = N'C:\\AdventureWorks\\2003Q3.ndf',

SIZE = 5MB,

MAXSIZE = 100MB,

FILEGROWTH = 5MB)

TO FILEGROUP [2003Q3]

通过在 CREATE TABLE 的 ON 子句中指定一个文件组,可以为文件创建一个表。但是,如果表未分区,则不能为多个文件组创建一个表。要为一个文件组创建表,请使用 CREATE TABLE 的 ON 子句。要创建分区表,必须先确定分区的功能机制。进行分区的标准以分区函数的形式从逻辑上与表相分离。此分区函数作为独立于表的定义存在,而这种物理分离将起到帮助作用,因为多个对象都可以使用该分区函数。因此,为表分区的第一步是创建分区函数。

为范围分区创建分区函数

范围分区必须使用边界条件进行定义。而且,即使通过 CHECK 约束对表进行了限制,也不能消除该范围任一边界的值。为了允许定期将数据移入该表,需要创建最后一个空分区。

在范围分区中,首先定义边界点:如果存在五个分区,则定义四个边界点值,并指定每个值是第一个分区的上边界 (LEFT) 还是第二个分区的下边界 (RIGHT)。根据 LEFT 或 RIGHT 指定,始终有一个空分区,因为该分区没有明确定义的边界点。

具体来讲,如果分区函数的第一个值(或边界条件)是 '1001',则边界分区中的值将是:

对于 LEFT

第一个分区是所有小于或等于 '20001001' 的数据

第二个分区是所有大于 '20001001' 的数据

对于 RIGHT

第一个分区是所有小于 '20001001' 的数据

第二个分区是所有大于或等于 '20001001' 数据

由于范围分区可能在 datetime 数据中进行定义,因此必须了解其含义。使用datetime具有某种含义:即总是同时指定日期和时间。未定义时间值的日期表示时间部分为“0”的 12:00 A.M。如果将 LEFT 与此类数据结合使用,则日期为 10 月 1 日 12:00 A.M. 的数据将位于第一个分区,而 10 月份的其他数据将位于第二个分区。从逻辑上讲,最好将开始值与 RIGHT 结合使用,而将结束值与 LEFT 结合使用。下面的三个子句将创建逻辑上相同的分区结构:

RANGE LEFT FOR VALUES ('20000930 23:59:59.997',

'20001231 23:59:59.997',

'0331 23:59:59.997',

'20010630 23:59:59.997')

RANGE RIGHT FOR VALUES ('20001001 00:00:00.000', '20010101 00:00:00.000', '20010401 00:00:00.000', '20010701 00:00:00.000')

RANGE RIGHT FOR VALUES ('20001001', '20010101', '20010401', '20010701')

注意:此处使用 datetime 数据类型确实增加了一定的复杂性,但您需要确保设置正确的边界情况。请注意使用 RIGHT 的简单性,因为默认时间为 12:00:00.000 A.M。对于 LEFT,复杂性增加是因为 datetime 数据类型具有精度。必须选择 23:59:59.997 的原因在于,datetime 数据无法保证毫秒级别的精度。相反,datetime 数据的精度在 3.33 毫秒内。使用 23:59:59.999 这个确切的时间值是不行的,因为该值将被舍入到最接近的时间值,即第二天的 12:00:00.000 A.M。由于进行了这种舍入,将无法正确定义边界,

对于 datetime 数据,必须对明确提供的毫秒值加倍小心。

注意:分区函数还允许将函数作为分区函数定义的一部分。您可以使用 DATEADD(ms,-3,'20010101'),而不是使用 '20001231 23:59:59.997' 明确定义时间。

要在四个活动分区(每个分区代表一个日历季度)中存储四分之一的 Orders 数据,并创建第五个分区以备将来使用(还是作为占位符,用于在分区表中移入和移出数据),请将 LEFT 分区函数与以下四个边界条件结合使用:

CREATE PARTITION FUNCTION OrderDateRangePFN(datetime)

AS

RANGE LEFT FOR VALUES ('20000930 23:59:59.997',

'20001231 23:59:59.997',

'20010331 23:59:59.997',

'20010630 23:59:59.997')

记住,定义四个边界点将创建五个分区。通过查看以下数据集检查此分区创建的数据集:

边界点 '20000930 23:59:59.997' 作为 LEFT(设置模式):

最左侧的分区将包含所有小于或等于 '20000930 23:59:59.997' 的值

边界点 '20001231 23:59:59.997':

第二个分区将包含所有大于 '20000930 23:59:59.997' 但小于或等于 '20001231 23:59:59.997' 的值

边界点 '20010331 23:59:59.997':

第三个分区将包含所有大于 '20001231 23:59:59.997' 但小于或等于 '20010331 23:59:59.997' 的值

边界点 '20010630 23:59:59.997':

第四个分区将包含所有大于 '20010331 23:59:59.997' 但小于或等于 '20010630 23:59:59.997' 的值

最后,第五个分区将包含所有大于 '20010630 23:59:59.997' 的值。

创建分区架构

创建分区函数后,必须将其与分区架构相关联,以便将分区定向至特定的文件组。定义分区架构时,即使多个分区位于同一个文件组中,也必须为每个分区指定一个文件组。对于前面创建的范围分区 (OrderDateRangePFN),存在五个分区;最后一个空分区将在 PRIMARY 文件组中创建。因为此分区永远不包含数据,所以不需要指定特殊的位置。

CREATE PARTITION SCHEME OrderDatePScheme

AS

PARTITION OrderDateRangePFN

TO ([2000Q3], [2000Q4], [2001Q1], [2001Q2], [PRIMARY])

注意:如果所有分区都位于同一个文件组中,则可以使用以下更简单的语法:

CREATE PARTITION SCHEME OrderDatePScheme

AS

PARTITION OrderDateRangePFN

ALL TO ([PRIMARY])

创建分区表

定义分区函数(逻辑结构)和分区架构(物理结构)后,即可创建表来利用它们。表定义应使用的架构,而架构又定义函数。要将这三者结合起来,必须指定应该应用分区函数的列。范围分区始终只映射到表中的一列,此列应与分区函数中定义的边界条件的数据类型相匹配。另外,如果表应明确限制数据集(而不是从负无穷大到正无穷大),则还应添加 CHECK 约束。

CREATE TABLE [dbo].[OrdersRange]

(

[PurchaseOrderID] [int] NOT NULL,

[EmployeeID] [int] NULL,

[VendorID] [int] NULL,

[TaxAmt] [money] NULL,

[Freight] [money] NULL,

[SubTotal] [money] NULL,

[Status] [tinyint] NOT NULL ,

[RevisionNumber] [tinyint] NULL ,

[ModifiedDate] [datetime] NULL ,

[ShipMethodID] [tinyint] NULL,

[ShipDate] [datetime] NOT NULL,

[OrderDate] [datetime] NOT NULL

CONSTRAINT OrdersRangeYear

CHECK ([OrderDate] >= '20030701'

AND [OrderDate] <= '0630 11:59:59.997'),

[TotalDue] [money] NULL

)

ON OrderDatePScheme (OrderDate)

GO

建立索引:是否分区?

默认情况下,分区表中创建的索引也使用相同的分区架构和分区列。如果属于这种情况,索引将与表对齐。尽管未作要求,但将表与其索引对齐可以使管理工作更容易进行,对于滑动窗口方案尤其如此。

例如,要创建唯一的索引,分区列必须是一个关键列;这将确保对相应的分区进行验证,以保证索引的唯一性。因此,如果需要在一列上对表进行分区,而必须在另一个列上创建唯一的索引,这些表和索引将无法对齐。在这种情况下,可以在唯一的列(如果是多列的唯一键,则可以是任一关键列)中对索引进行分区,或者根本就不进行分区。请注意,在分区表中移入和移出数据时,必须删除和创建此索引。

注意:如果您打算使用现有数据加载表并立即在其中添加索引,则通常可以通过以下方式获得更好的性能:先加载到未分区、未建立索引的表中,然后在加载数据后创建分区索引。通过为分区架构定义群集索引,可以在加载数据后更有效地为表分区。这也是为现有表分区的不错方法。要创建与未分区表相同的表并创建与已分区群集索引相同的群集索引,请用一个文件组目标位置替换创建表中的 ON 子句。然后,在加载数据之后为分区架构创建群集索引。

篇5:如何修复SQLSERVER 数据库置疑之(二)数据库教程

server|sqlserver|数据|数据库|置疑

如果 SQL Server 因为磁盘可用空间不足,而不能完成数据库的恢复,那么 SQL Server 2000 会返回错误 1105 并且将 sysdatabases 中的 status 列设为置疑,

你可以看到在SQLSERVER 的ERROR LOG 和OS的应用程序日志中应该有1105的错误信息:

SQL Server事务日志可能会被填满,这会阻止之后的数据库操作,包括UPDATE, DELETE, INSERT 和CHECKPOINT。

事务日志填满会导致1105错误:

Can't allocate space for object syslogs in database dbname because

the logsegment is full。 If you ran out of space in syslogs, dump

the transaction log。 Otherwise use ALTER DATABASE or

sp_extendsegment to increase the size of the segment。

这种现象可能出现于任何一个数据库中,包括Master和TempDB。一些难以预见的因素可能消耗日志空间。 例如:

一个大型事务, 尤其像批量数据更新、插入或删除。

一个未提交的事务。

检查点处理程序截除时所需的带宽过大。

截除时超过阈值

上述各种条件互相作用的结果。

用于发布的标记事务没有被日志读取程序读走

下面是修复的步骤和收缩日志的步骤:

1.在命令提示符下运行以下命令启动 SQL Server:

SQLSERVER -f -m

备注:-m 开关以单用户模式启动 SQL Server。在单用户模式下,只能成功建立一个连接。 请注意是否有任何其他客户机或服务可能会在您通过 SQL Server 查询分析器   建立连接前使用那个连接。

2. 重置置疑数据库的状态。

sp_resetstatus 'database_name'

下面是结果集:

Database'database_name'status reset!WARNING: You must reboot SQL Server prior to accessing this database!

3. 用 ALTER DATABASE 向数据库添加一个数据文件或日志文件:

USE masterGOCREATE DATABASE db_name ON( NAME = dbname_dat1, FILENAME = 'D:\\MSSQL\\Data\\dbname_dat1.ndf', SIZE = 1000MB, FILEGROWTH = 50MB)GO

--更改该数据库以添加一个 2GB 大小的新数据文件ALTER DATABASE db_nameADD FILE ( NAME = dbname_dat2, FILENAME = 'F:\\MSSQL\\DATA\\dbname_dat2.ndf', SIZE = 2000MB, FILEGROWTH = 50MB)GO--更改该数据库以添加一个1GB 大小的新日志文件ALTER DATABASE db_nameADD LOG FILE ( NAME = db_name_log2, FILENAME = 'F:\\MSSQL\\Data\\db_name_log2.ldf', SIZE = 1000MB, FILEGROWTH = 20MB),GO

4. 停止并重新启动 SQL Server:

用新的数据文件或日志文件所提供的额外空间,SQL Server 应该能完成数据库的恢复。

5. 释放磁盘空间并且重新运行恢复操作,按照下面的步骤收缩日志。

sp_resetstatus 关闭数据库的置疑标志,但是原封不动地保持数据库的其它选项。

为从根本上解决这样的问题,你可以按下面的操作配置SQLSERVER 2000:

a.如果不需要恢复到指定的时间点,你可以将数据库的恢复模式配置为简单,这样

UPDATE,DELETE,SELECT就不会记录日志,日志就不会增加的很大:

USE MASTER

GO

ALTER DATABASE DB_NAME SET RECOVERY SIMPLE

b.如果你的恢复模式是全部,你一定要配置日志字段收缩:

USE MASTER

GO

sp_dboption 'databasename','trunc. log on chkpt.',true

sp_dboption 'databasename','autoshrink',true

c.通过每日备份将日志收缩:

BACKUP DATABASE DATABASE_NAME TO BACKUP_DEVICES

BACKUP LOG DATABASE_NAME TO LOG_DEVICES

OR

BACKUP LOG DATABASE_NAME with truncate_only

**检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志并没有收缩!

d.每天在备份数据库完成之后,重新启动MS SQLSERVER SERVICE.

USE DATABASE_NAME

go

DBCC SHRINKFILE(2,truncateonly)

**检查日志的容量:DBCC SQLPERF (LOGSPACE) 这时日志已经收缩!

e.手动快速收缩日志:

/ *run below script,you will shrink you database log files

immediately, in my experience,you need to run the script for 3 or

4 minutes before stopping it manually */

use databasename

dbcc shrinkfile(2,notruncate)

dbcc shrinkfile(2,truncateonly)

create table t1(char1 char(4000))

go

declare @i int

select @i=0

while(1=1)

begin

while(@i<100)

begin

INSERT INTO T1 VALUES ('A')

SELECT @I=@I+1

END

TRUNCATE table T1

BACKUP LOG youdatabasename with truncate_only

end

GO

注意 只有在您的主要支持提供者指导下或有疑难解答建议的做法时,才可以使用

sp_resetstatus,

否则,可能会损坏数据库。

由于该过程修改了系统表,系统管理员必须在运行 sp_resetstatus这个过程前,启用系统表更新。要

启 用更新,使用下面的过程:

USE master

GO

sp_configure 'allow updates', 1

GO

RECONFIGURE WITH OVERRIDE

GO

过程创建后,立即禁用系统表更新:

sp_configure 'allow updates', 0

GO

RECONFIGURE WITH OVERRIDE

GO

只有系统管理员才能执行 sp_resetstatus。执行该过程后,立即关闭 SQL Server。

请参考:

support.microsoft.com/default.aspx?scid=kb;zh-cn;317375

support.microsoft.com/default.aspx?scid=kb;zh-cn;307775

篇6:SQLServer数据库学习笔记

1,exists和in的理解(参考/article/28922.htm)

exists:如果子查询中包括某一行,那么就为TRUE

in:如果操作数为TRUE等于表达式列表中的一个,那么就为TRUE

exists总是搞得不太明白

select 。。。from。。。where 。。。

where就相当于一个判断条件,只有where后面的表达式运算结果为TRUE,前面的才能select出来

EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False

1: SELECT c.CustomerId, CompanyName 2: FROM Customers c 3: WHERE EXISTS( 4: SELECT OrderID FROM Orders o 5: WHERE o.CustomerID = cu.CustomerID)

像这样的EXISTS子查询中的SELECT什么根本不重要,因为子查询只是检查这个表中有没有满足WHERE后条件的行, 有就返回TRUE,没有就FALSE,所以很多EXISTS后都是SELECT的*

一行行的去判定,EXISTS返回的是TRUE,就是存在,则把这行的相关信息输出

1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 学号=xs.学号 and 课程号=kc.课程号 )

分析下上面的查询语句:

把最外层的xs表里的记录一行一行的同中层一行一的笛卡尔乘积后拿到里面去检验

在最里层,如果xs_kc表里的某行有拿来检验的这行的学号,同时有中层拿来检验的课程号

就返回TRUE,说明这个这个学生选了这门课

中层如果某门课程没有收到返回的TRUE信息,说明这个名字和课程的搭配在xs_kc表中没有,或者说中层select出来的是没有被这个学生选择的课程信息,如果有这样的课程,就向最外层返回个TRUE

最外层在返回信息上加了not,即最外层找的是这样的一种学生:

他选择了所有的课程

最外层一行行的去检测,如果他满足这个条件,就输出他的姓名且只输出一次

我这是一层层的分析,还有么有什么别的办法?

2,select。。。into @。。。

和select @。。。 = 。。。应该是相同的吧

3,用AS为列重命名似乎比=更好点,和赋值区分开

4,用compute汇总的时候,如果是根据某列汇总的,先要order by此列,然后在compute相应信息,最后by此列

group或者compute的时候,如果by了某列,select里都要出现相同的列

区别是group的聚合函数在select行中(称为选择列表),而compute的聚合函数在compute行中,同时compute可以不带by,对所有行汇总

[SQLServer数据库学习笔记]

篇7:关于在SQLSERVER里调用COM组件数据库教程

server

Sql-server里可以调用基于IDispatch的COM组件

有兴趣的可以自己去查SQL帮助里的sp_OACreate、sp_OAMethod、sp_OADestroy等存储过程的用法,

下面是我在一个短信报警的小项目里的一些sql代码,报警信息通过各类软件插入到sql-server里,然后通过触发器调用组件,并发送短信到指定手机上去,实现自动报警功能。

//测试数据库的触发器

ALTER TRIGGER message_Trigger1

ON dbo.message

FOR INSERT /*, UPDATE, DELETE */

AS

/* IF UPDATE (column_name) ...*/

begin

declare @PhoneNum nvarchar(50)

declare @Content nvarchar(140)

declare @MessageId nvarchar(70)

declare @index int

declare @hr int

declare @object int

select @PhoneNum = phone_num, @Content = Content, @MessageId = message_id from inserted

select @index = 1

/*调用COM发送短信*/

begin

EXEC @hr = sp_OACreate '{26850DDA-862C-44FF-9232-282937F2CA4B}',@object OUT

if @hr = 0

begin

exec @hr=sp_OAMethod @object,'SendMsg',NULL,@Content,@PhoneNum,@index,@MessageId

exec sp_OADestroy @object

end

end

end

这里的代码可以说是没有问题,但是也可以说是有很大的问题,

关键就在于组件的SendMsg方法,为什么呢?我可以举出几个我实际碰到的问题来做具体说明。

最主要有2点

第1:此COM组件是否为进程内组件,组件内部代码是否足够强壮

第2:创建组件和销毁组件及组件方法要尽最大可能的快速

我对上述两点做一个说明

如果COM组件为进程内组件的话,意味着此组件被sql-server加载,如果此代码不够健壮,那么,由于组件本身导致的挂起,崩溃,会直接影响到整个sql-server,那么情况是非常严重的,这种错误,发生一次就足以要了你的小命,如果恰好在客户的脸上爆炸的话……

解决的方法只有这样:首先保证你的组件代码足够强壮,强壮到不能再强壮为止。还有就是尽量让组件不要是进程内的,如果已经是DLL了,那么就交给COM+ Catalog来管理。这样就解决了因为组件崩溃挂起导致sql-server产生问题。

其次,要让你的组件的创建、方法调用、销毁都快到不能再快,要快到几乎瞬间就完成。否则如果突然有海量数据进来,你的触发器来不及反映,那你的数据就可能被回滚掉,而且这些数据很重要,那你就等着被Fire吧 L 5555~~~~~

如果非要用这种方法的话,那么就要完成我上面提到的2点,并且最好启用COM+对象池。如果方法需要很长时间才能返回,并且无法优化了,那么就把这些方法移出去,把这些动作在另外的程序里做,让COM方法立刻返回。

总而言之,言而总之,在系统集成的时候如果几个开发厂商没有商量好接口,并且都采用SQL-SERVER数据库,那么关于此类数据的操作,似乎用这样的方法就是最好的补救。

个人觉得有点剑走偏锋的感觉,虽然很锋利,但是难免伤到自己

篇8:[引]SQLServer和Access、Excel数据传输简单总结数据库教程

access|excel|server|sqlserver|数据

www.tongyi.net/article/1101/200311013786.shtml

所谓的数据传输,其实是指SQLServer访问Access、Excel间的数据,

为什么要考虑到这个问题呢?

由于历史的原因,客户以前的数据很多都是在存入在文本数据库中,如Acess、Excel、Foxpro。现在系统升级及数据库服务器如SQLServer、ORACLE后,经常需要访问文本数据库中的数据,所以就会产生这样的需求。前段时间出差的项目,就是面临这样的一个问题:SQLServer和VFP之间的数据交换。

要完成标题的需要,在SQLServer中是一件非常简单的事情。

通常的可以有3种方式:1、DTS工具 2、BCP 3、分布式查询

DTS就不需要说了,因为那是图形化操作界面,很容易上手。

这里主要讲下后面两们,分别以查、增、删、改作为简单的例子:

下面废话就不说了,直接以T-SQL的形式表现出来。

一、SQLServer和Access

1、查询Access中数据的方法:

select * from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\\db2.mdb','select * from serv_user')

select * from OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source=“c:\\DB2.mdb”;User ID=Admin;Password=')...serv_user

2、从SQLServer向Access写数据:

insert into OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\\db2.mdb','select * from Accee表')

select * from SQLServer表

或用BCP

master..xp_cmdshell'bcp “serv-htjs.dbo.serv_user” out “c:\\db3.mdb” -c -q -S“.” -U“sa” -P“sa”'

上面的区别主要是:OpenRowSet需要mdb和表存在,BCP会在不存在的时候生成该mdb

3、从Access向SQLServer写数据:有了上面的基础,这个就很简单了

insert into SQLServer表 select * from

OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\\db2.mdb','select * from Accee表')

或用BCP

master..xp_cmdshell'bcp “serv-htjs.dbo.serv_user” in “c:\\db3.mdb” -c -q -S“.” -U“sa” -P“sa”'

4、删除Access数据:

delete from OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\\db2.mdb','select * from serv_user')

where lock=0

5、修改Access数据:

update OpenRowSet('microsoft.jet.oledb.4.0',';database=c:\\db2.mdb','select * from serv_user')

set lock=1

SQLServer和Access大致就这么多,

二、SQLServer和Excel

1、向Excel查询

select * from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\\book1.xls;','select * from [Sheet1$]') where c like '%f%'

select * from

OPENROWSET('MICROSOFT.JET.OLEDB.4.0'

,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\\book1.xls',[sheet1$])

1)hdr=yes时可以把xls的第1行作为字段看待,如第1个中hdr=no的话,where时就会报错

2)[]和美圆$必须要,否则M$可不认这个账

2、修改Execl

update OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\\book1.xls;','select * from [Sheet1$]')

set a='erquan' where c like '%f%'

3、导入导出

insert into OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;hdr=yes;database=c:\\book1.xls;','select * from [Sheet2$]')(id,name)

select id,name from serv_user

或BCP

master..xp_cmdshell'bcp “serv-htjs.dbo.serv_user” out “c:\\book2.xls” -c -q -S“.” -U“sa” -P“sa”'

从Excel向SQLServer导入:

select * into serv_user_bak

from OpenRowSet('microsoft.jet.oledb.4.0','Excel 8.0;HDR=yes;database=c:\\book1.xls;','select * from [Sheet1$]')

如果表serv_user_bak不存在,则创建

有关BCP和分布式查询的详细解答,就查SQLServer自带的帮助吧。

SQLServer和txt文件、HTML文件、VFP文件的数据交换都显得非常容易了。。。。

其实这些内容在帮助里都有,偶只不过是总结了一下,方便大家参考,呵呵~~

以上内容都经过测试~~

篇9:MDB数据库压缩方法数据库教程

数据|数据库|压缩

MDB数据库压缩方法

jimzj@21cn.com

虽然说MDB数据库功能不是很强大,但时由于在WIN x系统中已有缺省的驱动程序,所以不用另外像SQL,SYBASE一样安装一个管理驱动,而且携带方便,很多的小应用程序或网站还是采用MDB数据库,经常操作MDB数据时,就会经常碰到要对数据进行压缩,下面的我在网上找到和自己使用的经验写一下关于在各种环境中压缩MDB数据库的方法,提供大家参考:

一、ASP或VB中压缩

以前使用 DAO 时,Microsoft 有提供 CompactDatabase Method 来压缩 Microsoft Access 资料库,RepairDatabase Method 来修复损毁的 Microsoft Access 资料库。可是自从 ADO 出来之后,也提供了解决方法,不过有版本上的限制!限制说明如下:

ActiveX Data Objects (ADO), version 2.1

Microsoft OLE DB Provider for Jet, version 4.0

这是 Microsoft 提出的 ADO 的延伸功能:Microsoft Jet OLE DB Provider and Replication Objects (JRO)这个功能在 JET OLE DB Provider version 4.0 (Msjetoledb40.dll) 及 JRO version 2.1 (Msjro.dll) 中第一次被提出!这些必要的 DLL 文件在您安装了 MDAC 2.1 之后就有了,您可以在以下的网页中下载 MDAC 的最新版本!Universal Data Access Web Site在下载之前先到 VB6 中检查一下,【工程】【设定引用项目】中的 Microsoft Jet and Replication Objects X.X library 如果已经是 2.1 以上的版本,您就可以不用下载了!在您安装了 MDAC 2.1 或以上的版本之后,您就可以使用 ADO 来压缩或修复 Microsoft Access 资料库,下面的步骤告诉您如何使用 CompactDatabase Method 来压缩 Microsoft Access 资料库:1、开启一个新工程,点选功能表中的【工程】【设定引用项目】。

2、加入 Microsoft Jet and Replication Objects X.X library,其中 ( X.X 大于或等于 2.1 )。

3、在适当的地方加入以下的程序码,记得要修改 data source 的内容及目地资料库的路径:

Dim jro As jro.JetEngine

Set jro = New jro.JetEngine

jro.CompactDatabase “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\\\nwind2.mdb”, _ '来源资料库

“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\\\abbc2.mdb;Jet OLEDB:Engine Type=4” '目的资料库

在 DAO 3.60 之后,RepairDatabase Method 已经无法使用了,以上的程序码显示了 ADO CompactDatabase Method 的用法,而它也取代了 DAO 3.5 时的 RepairDatabase method

二、DELPHI中压缩

const  SConnectionString       = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'                                +'Jet OLEDB:Database Password=%s;';

function GetTempPathFileName:string;

var

SPath,SFile:array [0..254] of char;

begin

GetTempPath(254,SPath);

GetTempFileName(SPath,'~SM',0,SFile);

result:=SFile;

DeleteFile(result);

end;

function CompactDatabase(AFileName,APassWord:string):boolean;

//压缩与修复数据库,覆盖源文件

var

STempFileName:string;

vJE:OleVariant;

begin

STempFileName:=GetTempPathFileName;

try

vJE:=CreateOleObject('JRO.JetEngine');

vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),

format(SConnectionString,[STempFileName,APassWord]));

result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);

DeleteFile(STempFileName);

except

result:=false;

end;

end;

三、C++ Builder中压缩

C++ 中在网上并没有找到很好的方法,但是根据我原来所作的建立MDB数据库方法,也找到了一个相对实用的的压缩方法;

1、 建立MDB文件的函数

#include

bool CreateAccessFile( String stFileName )

{

if( FileExists( stFileName )) return true ;

Variant    vCreateAccess;

Procedure  PCreateAccess( “Create” );

PCreateAccess << “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” + stFileName ;

vCreateAccess = CreateOleObject( “ADOX.Catalog” );

vCreateAccess.Exec( PCreateAccess );

return ( FileExists( stFileName )) ;

}

//---------------------------------------------------------------------------

2、 由OLE想到的功能来实现压结合实际的功能

#include

void CompactDatabase( String stFileName )

{

Variant    vCreateAccess;

Procedure  PCreateAccess( “CompactDatabase” );

String stTempFile = “Temp.mdb” ;

if( FileExists(stTempFile)) DeleteFile(stTempFile) ;

PCreateAccess << “Provider=Microsoft.Jet.OLEDB.4.0;Data Source= ” + stFileName + “;” ; //如果有密码请加上后面这一句Jet OLEDB:Database Password=password;“ ;

PCreateAccess << ”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=“ + stTempFile + ”;“ ; //如果有密码请加上后面这一句Jet OLEDB:Database Password=password;” ;

vCreateAccess = CreateOleObject( “JRO.JetEngine” );

vCreateAccess.Exec( PCreateAccess );

//代替原来的数据库

CopyFile(stTempFile.c_str(),stFileName.c_str(), (int)false ) ;

DeleteFile(stTempFile) ;

}

四、Vc中压缩

#import “C:\\PROGRAM FILES\\COMMON FILES ystem\\ado\\MSJRO.DLL” no_namespace  Add the following (specifying your own source and destination database paths) to the .cpp file where you

want to compact the database:

try

{

IJetEnginePtr jet(__uuidof(JetEngine));

jet->CompactDatabase(

“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\\\nwind2.mdb”,

“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\\\abbc.mdb;” \\

“Jet OLEDB:Engine Type=4”);

}

catch(_com_error &e)

{

::MessageBox(NULL, (LPCTSTR)e.Description( ), “”, MB_OK) ;

}

更具体的E文可以看微软的文章:

support.microsoft.com/default.aspx?scid=kb;EN-US;230496

篇10:应用 SQLServer 链接服务器访问远程 Access 数据库数据库教程

access|server|sqlserver|访问|服务器|链接|数据|数据库

Web 开发中,经常要用到 Access 数据库,但是由于 Access 是一种文件型数据库,所以无法跨服务器进行访问。经过笔者的探索,发现可以利用 SQL Server 的链接服务器,把地理上分散的 Access 数据库整合起来,使 Access 数据库具有跨越 Web 服务器群的能力。这样做,还可以使 Access 数据库与 SQL Server,甚至 Oracle 等网络数据库连接起来,实现异构数据库的互连,从而执行分布式的查询、更新、命令和事务。

一、创建链接服务器,连接本地 Access 数据库

创建链接服务器可以用“企业管理器”,也可以执行系统存储过程 sp_addlinkedserver 来完成。用系统存储过程相对快捷一些,格式为:

sp_addlinkedserver '链接服务器名', '产品名', 'Microsoft.Jet.OLEDB.4.0', 'Access数据库路径及文件名'

指定 Microsoft.Jet.OLEDB.4.0 作为 provider_name,指定 Access 数据库文件的完整路径名作为 data_source。.mdb 数据库文件必须驻留在本地服务器上,路径必须是服务器上的有效路径。

例如,本例创建一个名为 mytest 的链接服务器,对 E:\\我的文档\\ 文件夹下名为 DOS.mdb 的 Access 数据库进行操作,则在“SQL查询分析器”中执行:

sp_addlinkedserver 'mytest', 'Access 2000', 'Microsoft.Jet.OLEDB.4.0', 'E:\\我的文档\\DOS.mdb'

二、创建链接服务器登录映射

同样可以用“企业管理器”或存储过程来完成。存储过程的格式为:

sp_addlinkedsrvlogin '链接服务器', false, 'SQLServer登录名', 'admin', NULL

为访问非保密的 Access 数据库,试图访问 Access 数据库的 SQL Server 登录应该有一个为用户 Admin 定义的没有密码的登录映射,下例使得本地用户 sa 可以访问名为 mytest 的链接服务器:

sp_addlinkedsrvlogin 'mytest', false, 'sa', 'admin', NULL

要访问保密的 Access 数据库,需使用注册表编辑器配置注册表,以便使用 Access 的正确的工作组信息文件。使用注册表编辑器向该注册表项中添加 Access 使用的工作组信息文件的完整路径名称:

HKEY_LOCAL_MACHINE OFTWARE\\Microsoft\\Jet\\4.0\\Engines ystemDB

配置了注册表项后,请使用 sp_addlinkedsrvlogin 创建从本地登录到 Access 登录的登录映射:

sp_addlinkedsrvlogin 'mytest', false, 'sa', '[AccessUser]', '[AccessPwd]'

链接服务器和链接服务器登录映射建立完毕,可以在企业管理器里进行查看,

三、链接服务器的测试

可以在“SQL查询分析器”里对创建的链接服务器进行测试。由于 Access 数据库没有目录和架构名称,因此,基于 Access 的链接服务器中的表可以在分布式查询中使用 [linked_server]...[table_name] 的四部分名称进行引用。下例从名为 mytest 的链接服务器中检索 articles 表的所有行:

Select * from mytest...articles

或:Select * from OpenQuery(mytest, 'Select * from .articles')

四、用代码访问链接服务器的 Access 数据库

只有实现用代码访问链接服务器的 Access 数据库,才使得链接服务器发挥了最大的灵活性和实用性。可以使用三中的测试链接服务器的代码建立存储过程,供 Asp 代码调用,也可以直接在 Asp 代码中调用链接服务器,以下是我通过测试的例子:

<%

Dim conn, sSQL, rs

conn=“Provider=sqloledb; server=localhost; uid=sa; pwd=SQLSERVER;” '用户 sa 的密码为 SQLSERVER。可以省略数据库名

on error resume next

sSQL = “select * from mytest...articles”

Set rs = Server.CreateObject(“ADODB.Recordset”)

rs.open sSQL, conn, 1, 1

rs.movefirst

response.write rs(0) & “

if err.number0 then

response.write “取数据错误:数据库连接出错,或存取数据表错误!”

else

response.write “OK!”

end if

%>

张庆 2002.10.1 3:58

简便实现Oracle数据库文件移动方法数据库教程

在两机器间克隆数据库的两种方法数据库教程

Oracle 9i 约束条件数据库教程

全检索的应用数据库教程

PL/SQL Developer数据库教程

下载远程管理sqlserver的注册方法数据库教程(锦集10篇)
远程管理sqlserver的注册方法数据库教程.doc
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
点击下载本文文档