barriers / 阅读 / 详情

MSSQL Server分布式查询

2023-06-16 14:57:19
共1条回复
南yi

SQL Server所谓的分布式查询(Distributed Query)是能够访问存放在同一部计算机或不同计算机上的SQL Server或不同种类的数据源, 从概念上来说分布式查询与普通查询区别 它需要连接多个MSSQL服务器也就是具有多了数据源。实现在服务器跨域或跨服务器访问。 而这些查询是否被使用完全看使用的需要。

本篇将演示利用SQL ServerExpress链接远程SQL Server来获取数据方式来详细说明分布式查询需要注意细节。先看一下系统架构数据查询基本处理:

当然如果采用了分布式查询 我们系统采取数据DataBase也就可能在多个远程[Remote Server]上访问时:

如上截取系统架构中关于数据与缓存流向中涉及的分布式查询业务, 当我们从客户端Client发起请求数据时。 首先检查MemCache Server缓存服务器是否有我们想要数据。 如果没有我需要查询数据库。 而此时数据要求查询多个远程服务器上多个数据库中表, 这时利用分布式查询。获得数据 然后更新我们在缓存服务器MemCache Server上数据保持数据更新同步, 同时向客户端Client直接返回数据。那如何来执行这一系列动作中最为关键分布式查询?

《1》分布式查询方式

我们知道Microsoft微软公用的数据访问的API是OLE_DB, 而对数据库MSSQL Server 2005的分布式查询支持也是OLE_DB方式.SQL Server 用户可以使用分布式查询访问以下内容:

A:存储在多个 SQL Server 实例中的分布式数据

B:存储在各种可以使用 OLE DB 访问接口访问的关系和非关系数据源中的异类数据

OLE DB 访问接口将在称为行集的表格格式对象中公开数据。SQL Server 允许在 Transact-SQL 语句中像引用 SQL Server 表一样引用

OLE DB 访问接口中的行集,[其实不用关心这个行集概念 它的功能类似SQL Server中临时表 不过它容积更大 能容纳类型更多 更丰富]

SQL Server 实例的客户机与 OLE DB 访问接口之间的连接

从上图可以看出。客户端借助OLEDB接口可以访问Oracle/MS Jet/MS SQL/ODBC/第三方等这些丰富数据源来我们分布式查询提供数据。 说了这么多关于OLEDB底层支持。 关于在MS SQL 2005中则支持两种方式来进行分布式查询:

使用添加链接服务器方式(Add Link Server)

使用特定名称及特定数据源来直接指定(Add Host Names)

其实这两种方式在实际运用中是有区别的:

方式A:Add Link Server方式建立服务器之间关联。创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。 一般适用于持久的数据操作 对于数据量偏大 服务器之间交付时间长特点。

方式B: Add Host Name 利用域来唯一识别数据库以及数据库表对象。 来实现跨服务器访问。 这种方式一般比较简单 主要适用于对数据需求临时性查询是使用偏多。 不适合做大批量数据提取。 有性能瓶颈。

《2》分布式查询实现

在进行实现分布式查询之前。本次测试Demo对应的SQL版本:

确定SQL Server版本后如下会演示两种方式来实现分布式查询,并对Distributed Query中详细细节进行说明。

《2.1》链接服务器查询

链接服务器配置使 SQL Server 可以对远程服务器上的 OLE DB 数据源执行命令。链接服务器具有以下优点:

访问远程服务器。

能够对企业内的异类数据源发出分布式查询、更新、命令和事务。

能够以相似的方式确定不同的数据源

下图显示了链接服务器配置的基础:

现在利用链接服务器方式实现数据访问远程服务器数据库CustomerDB中Users表数据先本地添加LinkServer:

以下是代码片段:

-- 建立连接服务器 第一步建立连接 IP方式来控制

EXEC sp_addlinkedserver "192.168.10.104" , "SQL Server"

-- 查看链接服务器信息 [测试连接成功]

select name , product, provider, data_source, query_timeout, lazy_schema_validation, is_remote_login_enabled, is_rpc_out_enabled

from sys.servers

where is_linked= 1

如上市建立连接服务器最简单方式。建立链接服务器过程其实调用了系统存储过程Sp_addlinkedserver. 第一个参数为Name 其实用来唯一标识链接服务器。 当然可以其他任何有意义字符串来定义,但我个人建议使用远程服务器的IP来标识。第二个参数是要添加为链接服务器的 OLE DB 数据源的产品名称。 默认为Null,如果指定”SQL Server“则无需指定其他参数。

如果你的本地装有多个数据库实例。 第一个种方式就不适用。这是就需要用SQL Server2005架构来唯一标识:

-- 含架构名 查询数据两种模式

select top 10 * from [192.168.10.104]. wl . 架构名 . 表名

-- 架构名 [采用默认架构名 ]

select top 10 * from [192.168.10.104]. CustomerDB . dbo. Users

对于SQL Server 2005架构这个概念很多人比较陌生:

在用户角色设置中需要对指定访问数据CustomerDB具有读写权限:

#p#副标题#e#

在远程服务器创建TEst用户时使用SQL Server身份验证方式登录 这时设置密码为RemoteDB.在使用非Sa用户进行远程:

以下是代码片段:

-- 执行前先删除已经存在数据

Exec sp_droplinkedsrvlogin [192.168.10.76],Null

Exec sp_dropserver "demodb"

-- 创建服务器连接

EXEC sp_addlinkedserver

@server="demodb",-- 被访问的服务器别名

@srvproduct="",

@provider="SQLOLEDB",

@datasrc="192.168.10.76" -- 要访问的服务器

EXEC sp_addlinkedsrvlogin

"demodb", -- 被访问的服务器别名

"false",

NULL,

"Test", -- 帐号

"RemoteDB" -- 密码

如上我们首先清除已经可能创建服务器数据记录. 然后创建服务器连接.sp_addlinkedSrvlogin系统存储过程用来创建链接服务器上远程登录之间的映射 . 即我们可以详细设置本地与远程服务器详细的映射信息. 例如设置我们特定用户访问的用户名和密码.

查询数据

-- 查询指定用户Test数据 select * from [demodb].CustomerDB.dbo.Users -- [如上测试成功]

查询结果

指定用户Test对CustomerDB访问数据方式测试成功。

当测试完成后我们不需要这个连接服务器是即可利用SP_DroplinkServer删除掉。 对应参数为创建时Name唯一标识。 通过Sp_helpserver来查看连接服务器详细信息。

注意如上创建连接服务器时设置srvproduct参数即OLED数据源名称时我们采用了SQlServer方式。

下面说明这种方式特点。:

这种方式是最为简单直接的一种建立链接服务器方式。 但是存在前提的。 测试发现:

在所有数据库的远程连接 dbo 的方式必须建立在SA 密码相同的基础上 ,否则容易产生无法连接的情况 Sa用户登录失败。 你也就明白这个SQlServer参数其实就是在本地数据拷贝服务器角色SysAdmin下用户SA.来对服务器进行登录。 如果你的本地Sa密码与远程服务器上密码不一致 则无法正常连接。

经过测试还发现一种情况:

利用Windows7访问XP(Sp2)系统时始终提示无法解析或拒绝连接SQL Server2005.这个问题我整了好久后来才到官方链接参数中发现。:如果你的XP系统没有打上SP4的补丁包 这个问题会始终出现。 需要特别注意。

《2.2》直接指定数据源分布式查询

其实相对第一种方式, 直接指定方式在SQL Server架构中 其实跳过本地与远程服务器建立映射关系的这一步。 通过链接关系建立 其实就是建立一种内部映射关系。 如果没有映射关系则 大部分设置需要手动控制。

直接指定数据源方式 需要开启分布式查询的基本权限 来进行查询:

以下是代码片段:

-- 如果想使用分布式查询,必须先开通分布式查询 [外围配置 这点是所有查询操作前提]

-- sp_configure--显示或更改当前服务器的全局配置设置

-- reconfigure 指定如果配置设置不需要服务器停止并重新启动,则更新当前运行的值

-- SQL2005默认是没有开启"Ad Hoc Distributed Queries" 组件

-- 启用权限

exec sp_configure "show advanced options",1 -- 显示高级配置

reconfigure -- 更新值

exec sp_configure "Ad Hoc Distributed Queries",1 -- 启用分布式查询

reconfigure

go

-- 关闭分布式查询

exec sp_configure "Ad Hoc Distributed Queries",0

reconfigure

exec sp_configure "show advanced options",0

reconfigure

go

-- 开启权限后 另外一种查询方式

-- 查询格式

SELECT * FROM OPENDATASOURCE("SQLOLEDB",

"Data Source=远程ip;User ID=sa;Password=密码").库名.dbo.表名

WHERE 条件

-- 需要开启权限

-- 开启权限 提示[远程的SqlServer不允许远程连接]

select * from OPENDATASOURCE("SQLOLEDB","Data Source=192.168.10.67; User

如上我们首先清除已经可能创建服务器数据记录. 然后创建服务器连接.sp_addlinkedSrvlogin系统存储过程用来创建链接服务器上远程登录之间的映射 . 即我们可以详细设置本地与远程服务器详细的映射信息. 例如设置我们特定用户访问的用户名和密码.

查询数据

-- 查询指定用户Test数据 select * from [demodb].CustomerDB.dbo.Users -- [如上测试成功]

查询结果

指定用户Test对CustomerDB访问数据方式测试成功。

《3》问题排查与更多查询方式

当我们在实际编程中进行访问远程数据时 因为不同操作环境会引发各种各样的异常,如下我会提出一种常见的异常方式解决办法和关于远程数据操作更多查询方式。

《3.1》无法建立远程连接

其实这个问题在做分布式查询时极其常见。 而引起这个问题的因素过多。 我们一时无法判断真正引发这个异常地方。 只能通过逐个排查方式来进行设置:

例如我们在建立关联关系后 进行查询时会遇到:

提示是: 在进行远程连接时超时, 引起这个问题原因可能是远程服务器积极拒绝访问!

首先要在SQL Server Configuation Manager中保证你服务已经运行 且是开机自动运行。

再次检查SQL Server 2005外围配置DataBaseEngine允许远程连接:

设置完成后。我们还需要设置SQL Server Analysis Services分析服务也支持远程数据查询:

在远程服务器上如果启用了防火墙则可能对目前SQL Server Server方位实例进行拦截。 所以在服务器端启用防火墙情况下要为SQL Server DAtaBase创建例外。防止客户端请求被拦截。

《3.2》进程被其他用户占用

当我们在远程分布式查询中有创建动作或是类似创建一个新的数据库。 有时会提示 “该数据库无法操作 已经别其他进程占用”异常。 导致我们无法访问数据库。 或是执行我们要做的创建操作.

遇到这种情况我们可以利用SA权限查询到Master数据库对应数据库被占用的进程 并杀掉Kill Process.查询:

以下是代码片段:

-- [sysprocesses 表中保存关于运行在 Microsoft SQL Server 上的进程的信息。

-- 这些进程可以是客户端进程或系统进程。sysprocesses 只存储在 master 数据库中]

use Master

go

SELECT * FROM sysprocesses ,sysdatabases

WHERE sysprocesses.dbid=sysdatabases.dbid AND sysdatabases.Name="CustomerDB"

select * from sysprocesses

select * from sysdatabases

-- 杀死占用进程

kill 5

当我们对进程占用清除时有可能访问数据库被系统进程占用。 则这时用Sa无法杀死。这时提示:

“Only use Process can be Kill ”在SQL Server2005 只有只有用户进程才能Kill掉。

《3.3》更多的查询操作

往往我们在实际操作中需要对数据读写有更多要求。 例如从远程连接多个服务器进行数据读取或是把本地数据提交到服务器上。 为了提高效率和性能采用分布式事务来进行批量操作等等。 如下简单介绍在分布式查询中多中数据操作:

把远程数据导入本地:

以下是代码片段:

-- 把本地表导入远程表 [openWset方式]

insert openrowset( "SQLOLEDB ", "sql服务器名 "; "用户名 "; "密码 ",数据库名.dbo.表名) select *from 本地表

-- 把本地表导入远程表 [open Query方式]

insert openquery(ITSV, "SELECT * FROM 数据库.dbo.表名 ")

导入时使用Into方式 自动在本地创建CopyDB表完全复制远程服务器上Users表的数据结构。但是要注意在进行后 的CopyDB将不包含原表的主键和索引约束。 虽然能快构建 但是主键和索引设置都会丢失。

本地数据导入远程:

-- 把本地表导入远程表 [openWset方式] insert openrowset( "SQLOLEDB ", "sql服务器名 "; "用户名 "; "密码 ",数据库名.dbo.表名) select *from 本地表 -- 把本地表导入远程表 [open Query方式] insert openquery(ITSV, "SELECT * FROM 数据库.dbo.表名 ")

更新本地表数据:

以下是代码片段:

-- 把本地表导入远程表 [opendataSource方式]

insert opendatasource( "SQLOLEDB ", "Data Source=ip/ServerName;User ID=登陆名;Password=密码 ").数据库.dbo.表名

-- 更新本地表 [openowset方式]

update b set b.列A=a.列A from openrowset( "SQLOLEDB ", "sql服务器名 "; "用户名 "; "密码 ",数据库名.dbo.表名)

as a inner join 本地表 b on a.column1=b.column1

当然还有更多方式来操作分布式查询操作。各位都可以尝试。

《4》尾 语

如上是我最近在项目中处理关于分布式查询涉及到方方面面。 从系统架构到分部是查询具体操作细节。基本都是一些非常基础运用。当然也参考不少资料。以及动手来验证整个过程出现问题原因所在。 篇幅有限 写的有些仓促。 难免有纰漏地方 还望各位指正。

#p#副标题#e#

相关推荐

dbo.是什么意思

DBO: Database Owner,意思是数据库的所有者.
2023-06-16 14:29:203

sql的表名中的dbo是什么意思

dbo是用户名啊 你点击用户就可以看到有用户名为dbo的用户~~!
2023-06-16 14:29:383

什么是DBO模式

DBO是设计建造运营的简化。DBO模式是一种国际通行的项目建设模式,具有单一责任“功能保证的特点,是支撑污水处理服务专业的典型模式,特别适合于污水厂这样的成套装置的建设。DBO的典型特点之一是单一责任主体比较明确。作为专业化的公司,既要负责设计,也负责后面的建设运营。专业化的公司由于设计和专业制造,可以缩短工期,提高运营效率,工程质量得到保证。此外,还负责运维管理及全生命周期节约成本。 *** 保持足够的掌控力,拥有项目的所有权,然后由我们来建设和运营,通过专业化的设计和综合性的服务可以降低整体的费用。
2023-06-16 14:29:521

dbo有机碱是啥

有机碱的定义是很广泛的,一般情况下,有机碱都含有氮原子,例如胺类化合物和含氮杂环化合物。并不是所有的有机碱都可以被质子化,照广义的酸碱理论来说,有很多物质属于有机碱,醇的碱金属盐类,例如甲醇钠,乙醇钾,叔丁醇钾;有机金属化合物,如烷基锂试剂,格氏试剂;氢氧化季铵盐等。中文名有机碱外文名Organic base定义显碱性的有机化合物例如有机金属试剂,含氮杂环,生物碱有机碱介绍有机碱的定义是很广泛的,一般情况下,可以说有机碱就是就是分子中含有氨基的有机化合物,例如胺类化合物。按照广义的酸碱理论来说,又有很多物质属于有机碱,醇的碱金属盐类,例如甲醇钠,乙醇钾,叔丁醇钾;烷基金属锂化合物,例如丁基锂,苯基锂;胺基锂化合物,例如二异丙基胺基锂(LDA),六甲基二硅胺基锂(LiHMDS);这些有机碱不是普通意义上的碱,与通常我们接触到的碱性质上有显著的差异。凡是能给出电子对的都是碱凡是能接受电子对的都是酸吡啶就是比较常见的有机碱它能与盐酸成盐,叫吡啶盐酸盐生物碱(Alkaloid)为一类含氮的有机化合物,存在于自然界(一般指植物,但有的也存在于动物)。有似碱的性质,所以过去又称为赝碱。大多数生物碱均有复杂的环状结构,氮素多包括在环内,具有光学活性。但也有少数生物碱例外。如麻黄碱是有机胺衍生物,氮原子不在环内;咖啡因虽为含氮的杂环衍生物,但碱性非常弱,或基本上没有碱性;秋水仙碱几乎完全没有碱性,氮原子也不在环内……等。由于它们均来源于植物的含氮有机化合物,而又有明显的生物活性,故仍包括在生物碱的范围内。而有些来源于天然的含氮有机化合物,如某些维生素、氨基酸、肽类,习惯上又不属于“生物碱",所以"生物碱"一词还未有严格而确切的定义。已知生物碱种类很多,约在2,000种以上,有一些结构式还没有完全确定。它们结构比较复杂,可分为59种类型。随着新的生物碱的发现,分类也将随之而更新。分享你的世界我要分享见解,点击发布纠错欠一身债没钱还不想失信影响家人,在保定联系我们帮你停息挂账债务预期协商解决广告明天大胆满仓买入,这5只股票或将涨停,反正不收费,马上测测钱坤证券广告保定 季铵盐消毒液厂家季铵盐消毒液 量大从优关注消毒液的人也在看代工贴牌 产品代理 不含酒店 可随时携带,消字号认证 杀菌消毒 空气气溶胶消杀 100ml可定制河北福赛生物科技发展广告大家还在搜四甲基氢氧化铵四丁基硫酸氢铵十二烷基苯有机碱有哪些高中化学网课火碱价格九年级上册化学视频讲解视频硫氢化钠的用途广告高颜值主播在yy等你!赶快下载和女神互动!相关推荐有机碱_相关词语有机酸具有酸性的有机化合物查看词条强碱分为有机强碱无机强碱查看词条羟基常见的极性基团查看词条生物碱天然有机化合物查看词条无机物不含碳的那部分化合物查看词条官能团原子或原子团查看词条弱酸和强酸相对的酸查看词条酯化反应一类有机化学反应查看词条溶解性不能容纳更多的溶质查看词条非水溶液滴定法水以外溶剂滴定的方法查看词条词条贡献者该词条共有17人参与编辑,查看全部 词条有帮助,感谢贡献者意见反馈权威合作百科协议百度百科是免费编辑平台,无收费代编服务 | 详情Baidu 京ICP证030173号编辑传视频TA说在
2023-06-16 14:30:001

SqlServer中的dbo是什么意思

dbo是一个用户,系统管理员。如何启用DAC功能 专用管理员连接功能以及注意事项1、只有系统管理员(sysadmin)角色相关成员可以使用DAC连接存取SQL Server(Local)本地连接2、一个执行个体只能存在一个DAC。 3、使用DAC通常是让DBA查询和排解SQL Server问题(当无法正常连接执行个体),4、好比执行sp_who2、Kill SPID、DBCC SQLPERF、DBCC DROPCLEANBUFFERS …等,使用DAC连接时,切勿执行需耗费大量资源的命令,如DBCC CHECKDB、DBCC SHRINKDATABASE..等5、使用DAC登录才能修改系统表或者查看系统表,以前SQL2000的时候你可以随便修改系统表,到了SQL2005就开始限制您了
2023-06-16 14:30:101

SqlServer中的dbo是什么意思

SqlServer中的dbo:dbo是每个数据库的默认用户,具有所有者权限,即DbOwner 。
2023-06-16 14:30:171

SqlServer中的dbo是什么意思

方法一1、打开sqlserver管理器,连接进入数据库,然后点击“新建查询”。2、如图,在编辑区输入“select @@version”,然后右键选择“执行”。3、在下方“结果”中可看到所用sqlserver数据库工具的相关信息。如图,可以看到是“Microsoft SQL Server 2005的开发版”,版本号是“9.00.1399.06”,系统是“windows NT 6.1”。方法二1、还有一种方法是在打开的资源管理器中的数据库根节点处右键,然后点击“属性”。2、然后在弹出的“属性”窗口点击“常规”选项,即可看到相关的信息了。方法三在打不开sqlserver时,还可以通过控制面板查看版本信息。(方法:依次点击“开始”→“控制面板”→“卸载程序”,然后找到sqlserver程序就可以查看了)
2023-06-16 14:30:272

化学原料dbo是什么意思

指的是化学试剂对丁氧基苯甲烯。其具有特有的类似茴香的香气,味甜。主要采用醚化缩合法:以对甲苯酚和甲醇为原料,先进行醚化反应,然后与乙醛进行缩合反应而得。也可从茴香、八角茴香及小茴香等天然原料中,分馏提取。
2023-06-16 14:30:361

dbo项目里都有那些设备

配电箱、隔离开关、断路器等。dbo项目的配电箱设备是在低压供电系统末端负责完成电能控制保护、转换和分配的设备,主要由电线、元器件(包括隔离开关、断路器等)及箱体等组成。dbo项目是电商全程性服务。主要包括三个阶段,Design设计策划、Build平台建设、Operate运营辅助。
2023-06-16 14:30:451

在工程项目管理模式中,DBO是经常被人们提及的一种模式,其含义是( )。

【答案】:C知识点:工程项目承发包管理模式。DBO模式下承包商不仅承担工程的设计施工,在移交给业主之前的一段时间内还要负责其所建设工程的运营。
2023-06-16 14:30:551

请问高手,建立数据库表之后,自动带一个[dbo].是什么意思

为什么,查询分析器中的 表名前加一个dbo 前缀答:是你的用户权限所致。如果你用SA登录,查询本服务器里的数据库是不用加DBO的。 另 如果你做跨服务器查询时就要用到DBO。 如 select * from sf11.rayben.dbo.table1 两个特殊数据库用户: dbo,数据库的拥有者,在安装sqlserver时,被设置到model数据库中,不能被删除,所以dbo在每个数据库中都存在。dbo是数据库的最高权力者,对应于创建该数据库的登陆用户,即所有的数据库的dbo都对应于sa帐户; guest,这个用户可以使任何已经登陆到sqlserver服务器的用户都可以访问数据库,即使它还没有成为本数据库的用户。所有的系统数据库除model以外都有guest用户。所有新建的数据库都没有这个用户,如果有必要添加guest用户,请用sp_grantdbaccess来明确建立这个用户。 至于你说的[]是为了区别表和字段与关键字重名。比如name 你就用[name] 便不会与sql的关键字重名了。 至于IDENTITY (1, 1)是自动增长列 数据加一条 该字段加1 Chinese_PRC_CS_AI_WS 前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。 排序规则的后半部份即后缀 含义: _BIN 二进制排序 _CI(CS) 是否区分大小写,CI不区分,CS区分 _AI(AS) 是否区分重音,AI不区分,AS区分 _KI(KS) 是否区分假名类型,KI不区分,KS区分 _WI(WS) 是否区分宽度 WI不区分,WS区分 区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。 区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项, 比较还将重音不同的字母视为不等。 区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。 区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项 ON[PRIMARY]表明是放在主文件组里面 主键的意思
2023-06-16 14:31:141

在任何数据库中dbo用户可以删除吗?

在删除SQL Server用户时,有时会报错:Microsoft SQL Server错误: 15138删除对于用户失败,数据库主体在该数据库中拥有架构,无法删除。删除 对于 用户“*****”失败。 (Microsoft.SqlServer.Smo) 。下面将为您介绍两种的解决方法。其他信息:执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)解决方法一先删除此用户对应的架构,然后在删除对应的用户步骤1。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 构架,先删除对应的构架2。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 用户,删除对应的用户
2023-06-16 14:31:211

关于DBO模式的说法,正确的有( )。

【答案】:A、B、D本题考查的是工程项目的承发包管理模式。DBO模式下,责任主体相对单一,比较明确,风险全部转移给DBO的主体,设计、施工、运营三个过程均由一个责任主体来完成。DBO模式也可以优化项目的全寿命周期成本。从时间角度看,DBO合同可以减少不必要的延误,使施工的周期更为合理;从质量角度看,DBO合同可以保证项目质量长期的可靠性;从财务角度看,DBO合同下仅需要承担简单的责任而同时拥有长期的承诺保障。但是,DBO模式责任范围的界定容易引起较多争议,招标的过程也较长,需要专业的咨询公司的介入。参见教材P27。
2023-06-16 14:31:281

sql2005里有.dbo文件,mdf文件,请问他们有什么区别吗?

.dbo文件?sqlserver中,dbo 是具有在数据库中执行所有活动的暗示性权限的用户。是一个用户。.mdf文件。是指的数据库文件,所有的数据都存放在.mdf里面。另外和.mdf文件。对应的,是.ldf文件,数据库日志文件。存放处理数据的相应日志,这个文件可以没有,也能正常打开.mdf文件。希望楼主顺利。
2023-06-16 14:31:371

SQL2005创建表,为什么前面有dbo.+表名?

是所有者默认架构;sa登陆名,对应的数据库用户和默认架构是dbo;系统管理员的默认架构是dbo所以为以上账号建的对象都是有dbo的,可以更改.在安全性里选择登陆名更改
2023-06-16 14:31:463

sqlserver中的表所有者不是dbo怎么改成dbo的

sqlserver中的表所有者不是dbo怎么改成dbo的1:从下面的图片中就可以看出来,当前这个选中的表的所有者是"dxkj",并不是dbo,所以现在要把这个表的所有者改回dbo的,在该表上点击右键,选择“设计”,如下图:2:右键点击表名然后选择设计表,如下图3:在工具
2023-06-16 14:31:541

请问DBO是项目融资的一重方式吗?

DBO是PPP的一种, PPP是英文“Public-Private Partnerships”的简写,中文直译为“公私合伙制”,简言之指公共部门通过与私人部门建立伙伴关系提供公共产品或服务的一种方式。由于PPP与传统的公用事业提供方式相比具有很多优越性,近二十年来,各国或国际组织都争相尝试将PPP的各种模式应用于本国或区域内的基础设施建设。从90年代初期开始,全球PPP项目迅猛增长,并于1997年达到顶峰。伴随1997年亚洲、俄罗斯和巴西经济危机的出现,全球PPP项目有所减少,之后在平稳中又开始逐渐回升。有资料表明,在未来15年内,全球发展中国家大约需要2万亿美元投资于基础设施建设。因此,未来若干年内,全球很可能会出现PPP项目建设的新高潮。常见的PPP分类如下:Operation and Maintenance Contract O&M 经营和维护Design Build DB 设计-建设Design Build Major Maintenance DBMM 设计-建设-主要维护Design Build Operate (Super Turnkey) DBO 设计-建设-经营(超级交钥匙)私人部门除承担DB和DBMM中的所有职能外,还负责经营该基础设施,但整个过程中资产的所有权仍由公共部门保留。Lease Develop Operate LDO 租赁-开发-经营Build Lease Operate Transfer BLOT 建设-租赁-经营-转让Build Transfer Operate BTO 建设-转让-经营Build Own Transfer BOT 建设-拥有-转让Build Own Operate Transfer BOOT 建设-拥有-经营-转让Build Own Operate BOO 建设-拥有-经营Buy Build Operate BBO 购买-建设-经营
2023-06-16 14:32:031

sybase的user 、dbo、alias的区别

从字面意思去理解就可以了。user:使用者,表或者库的使用者一般是多个。dbo:database owner 数据库所有者,一般只有一位。alias:别名。比如一个user叫a,它可以有alias是b,所以,a有的所有的权限b也有。当然,这里的a也可以是指一个组。
2023-06-16 14:32:121

什么是数据库

什么是数据库? 数据库是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个 索引与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。 以员工记录为例,您可以设想一个含有员工姓名、地址、工资、扣税以及津贴等内容的表。让我们考虑一下这些内容可能如何组织在一起。您可以设想一个表包含员工姓名、地址和电话号码。您希望保存的其它信息可能包括工资、工资范围、上次加薪时间、下次加薪时间、员工业绩评定等内容。 这些内容是否应保存在一个表格中?几乎可以肯定不应该如此。不同类别的员工的工资范围可能没有区别;这样,您可以仅将员工类型储存在员工记录表中,而将工资范围储存在另一个表中,通过类型编号与这个表关联。考虑以下情况: Key Lastname SalaryType SalaryType Min Max 1 Adams 2 1 30000 45000 2 Johnson 1 2 45000 60000 3 Smyth 3 3 60000 75000 4 Tully 1 5 Wolff 2 SalaryType 列中的数据引用第二个表。我们可以想象出许多种这样的表,如用于存储居住城市和每个城市的税值、健康计划扣除金额等的表。每个表都有一个主键列(如上面两个表中最左边的列)和若干数据列。在数据库中建立表格既是一门艺术,也是一门科学。这些表的结构由它们的范式指出。我们通常说表属于1NF、2NF 或 3NF。 第一范式:表中的每个表元应该只有一个值(永远不可能是一个数组)。(1NF) 第二范式:满足 1NF,并且每一个非主键列完全依赖于主键列。这表示主键和该行中的剩余表元之间是 1 对 1 的关系。(2NF) 第三范式:满足 2NF,并且所有非主键列是互相独立的。任何一个数据列中包含的值都不能从其他列的数据计算得到。(3NF) 现在,几乎所有的数据库都是基于“第三范式 (3NF)”创建的。这意味着通常都有相当多的表,每个表中的信息列都相对较少。 从数据库中获取数据 假设我们希望生成一个包含员工及其工资范围的表,在我们设计的一个练习中将使用这个表。这个表格不是直接存在在数据库中,但可以通过向数据库发出一个查询来构建它。我们希望得到如下所示的一个表: Name Min Max Tully $30,000.00 $45,000.00 Johnson $30,000.00 $45,000.00 Wolff $45,000.00 $60,000.00 Adams $45,000.00 $60,000.00 Smyth $60,000.00 $75,000.00 我们发现,获得这些表的查询形式如下所示 SELECT DISTINCTROW Employees.Name, SalaryRanges.Min, SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey ORDER BY SalaryRanges.Min; 这种语言称为结构化查询语言,即 SQL,而且它是几乎目前所有数据库都可以使用的一种语言。SQL-92 标准被认为是一种基础标准,而且已更新多次。 数据库的种类 PC 上的数据库,如 dBase、Borland Paradox、Microsoft Access 和 FoxBase。 数据库服务器:IBM DB/2、Microsoft SQL Server、 Oracle、Sybase、SQLBase 和 XDB。 所有这些数据库产品都支持多种相对类似的 SQL 方言,因此,所有数据库最初看起来好象可以互换。每种数据库都有不同的性能特征,而且每一种都有不同的用户界面和编程接口。 ODBC 如果我们能够以某种方式编写不依赖于特定厂商的数据库的代码,并且能够不改变自己的调用程序即可从这些数据库中得到相同的结果,那将是一件很好的事。如果我们可以仅为所有这些数据库编写一些封装,使它们具有相似的编程接口,这种对数据库编程独立于供应商的特性将很容易实现。 什么是 JDBC? JDBC 是对 ODBC API 进行的一种面向对象的封装和重新设计,它易于学习和使用,并且它真正能够使您编写不依赖厂商的代码,用以查询和操纵数据库。尽管它与所有 Java API 一样,都是面向对象的,但它并不是很高级别的对象集. 除 Microsoft 之外,多数厂商都采用了 JDBC,并为其数据库提供了 JDBC 驱动程序;这使您可轻松地真正编写几乎完全不依赖数据库的代码。另外,JavaSoft 和 Intersolv 已开发了一种称为 JDBC-ODBC Bridge 的产品,可使您连接还没有直接的 JDBC 驱动程序的数据库。支持 JDBC 的所有数据库必须至少可以支持 SQL-92 标准。这在很大程度上实现了跨数据库和平台的可移植性。 安装和使用 JDBC JDBC 的类都被归到 java.sql 包中,在安装 Java JDK 1.4时会自动安装。然而,如果您想使用 JDBC-ODBC 桥。JDBC-ODBC 驱动程序可从 Sun 的 Java 网站 (http://java.sun.com/) 轻松地找到并下载。在您扩充并安装了这个驱动程序后,必须执行下列步骤: 将 jdbc-odbcclasses; 路径添加到您的 PATH 环境变量中。 将 jdbc-odbcclasses; 路径添加到您的 CLASSPATH 环境变量中。 JDBC 驱动程序的类型 Java 程序连接数据库的方法实际上有四种: 1. JDBC-ODBC 桥和 ODBC 驱动程序 -- 在这种方式下,这是一个本地解决方案,因为 ODBC 驱动程序和桥代码必须出现在用户的每台机器中。从根本上说这是一个临时解决方案。 2. 本机代码和 Java 驱动程序 -- 它用另一个本地解决方案(该平台上的 Java 可调用的本机代码)取代 ODBC 和 JDBC-ODBC 桥。 3. JDBC 网络的纯 Java 驱动程序 -- 由 Java 驱动程序翻译的 JDBC 形成传送给服务器的独立协议。然后,服务器可连接任何数量的数据库。这种方法使您可能从客户机 Applet 中调用服务器,并将结果返回到您的 Applet。在这种情况下,中间件软件提供商可提供服务器。 4. 本机协议 Java 驱动程序 -- Java 驱动程序直接转换为该数据库的协议并进行调用。这种方法也可以通过网络使用,而且可以在 Web 浏览器的 Applet 中显示结果。在这种情况下,每个数据库厂商将提供驱动程序。 如果您希望编写代码来处理 PC 客户机数据库,如 dBase、Foxbase 或 Access,则您可能会使用第一种方法,并且拥有用户机器上的所有代码。更大的客户机-服务器数据库产品(如 IBM 的 DB2)已提供了第 3 级别的驱动程序。 两层模型和三层模型 当数据库和查询它的应用程序在同一台机器上,而且没有服务器代码的干预时,我们将生成的程序称为两层模型。一层是应用程序,而另一层是数据库。在 JDBC-ODBC 桥系统中通常是这种情况。 当一个应用程序或 applet 调用服务器,服务器再去调用数据库时,我们称其为三层模型。当您调用称为“服务器”的程序时通常是这种情况。 编写 JDBC 代码访问数据库 用 ODBC 注册您的数据库 连接数据库 所有与数据库有关的对象和方法都在 java.sql 包中,因此在使用 JDBC 的程序中必须加入 "import java.sql.* "。 JDBC 要连接 ODBC 数据库,您必须首先加载 JDBC-ODBC 桥驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 该语句加载驱动程序,并创建该类的一个实例。然后,要连接一个特定的数据库,您必须创建 Connect 类的一个实例,并使用 URL 语法连接数据库。 String url = "jdbc:odbc:Northwind"; Connection con = DriverManager.getConnection(url); 请注意,您使用的数据库名是您在 ODBC 设置面板中输入的“数据源”名称。 URL 语法可能因数据库类型的不同而变化极大。 jdbc:subprotocol:subname 第一组字符代表连接协议,并且始终是 jdbc。还可能有一个子协议,在此处,子协议被指定为 odbc。它规定了一类数据库的连通性机制。如果您要连接其它机器上的数据库服务器,可能也要指定该机器和一个子目录: jdbc:bark//doggie/elliott 最后,您可能要指定用户名和口令,作为连接字符串的一部分: jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof 访问MSSQL Server方法:(驱动程序需要:msutil.jar,msbase.jar,mssqlServer.jar) DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver URL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo username=sa password= maxcon=10 mincon=1 poolName=SkyDev 利用我们开发的数据库类,使用方法如下: DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost", 1433, "demo", "sa", "")); Connection con = DbO.getConnection(); //类代码(不含连接工厂实现) package skydev.modules.data; public final class SqlServerConnectionFactory extends ConnectionFactory { private final String dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; private String host; private int port; private String databaseName; public SqlServerConnectionFactory() { super.setDriverName(dbDriver); } /** * * @param host 数据库所在的主机名:如"localhost" * @param port SQL服务器运行的端口号,如果使用缺省值 1433,传入一个负数即可 * @param databaseName 数据库名称 * @param userName 用户名 * @param password 口令 */ public SqlServerConnectionFactory(String host, int port, String databaseName, String userName, String password) { this.setHost(host); this.setPort(port); this.setDatabaseName(databaseName); this.setUserName(userName); this.setPassword(password); init(); } private void init() { super.setDriverName(dbDriver); super.setUrl("jdbc:microsoft:sqlserver://" + host.trim() + ":" + new Integer(port).toString() + ";DatabaseName=" + databaseName.trim()); //super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo"); } …… //------------------------------------------------------------------------------------ 访问MySQL的方法: DBDriver=com.mysql.jdbc.Driver URL=jdbc:mysql://localhost/demo username= password= maxcon=5 mincon=1 poolName=zhengmao 访问数据库 一旦连接到数据库,就可以请求表名以及表列的名称和内容等信息,而且您可以运行 SQL 语句来查询数据库或者添加或修改其内容。可用来从数据库中获取信息的对象有: DatabaseMetaData 有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。 ResultSet 关于某个表的信息或一个查询的结果。您必须逐行访问数据行,但是您可以任何顺序访问列。 ResultSetMetaData 有关 ResultSet 中列的名称和类型的信息。 尽管每个对象都有大量的方法让您获得数据库元素的极为详细的信息,但在每个对象中都有几种主要的方法使您可获得数据的最重要信息。然而,如果您希望看到比此处更多的信息,建议您学习文档以获得其余方法的说明。 ResultSet ResultSet 对象是 JDBC 中最重要的单个对象。从本质上讲,它是对一个一般宽度和未知长度的表的一种抽象。几乎所有的方法和查询都将数据作为 ResultSet 返回。ResultSet 包含任意数量的命名列,您可以按名称访问这些列。它还包含一个或多个行,您可以按顺序自上而下逐一访问。在您使用 ResultSet 之前,必须查询它包含多少个列。此信息存储在 ResultSetMetaData 对象中。 //从元数据中获得列数 ResultSetMetaData rsmd; rsmd = results.getMetaData(); numCols = rsmd.getColumnCount(); 当您获得一个 ResultSet 时,它正好指向第一行之前的位置。您可以使用 next() 方法得到其他每一行,当没有更多行时,该方法会返回 false。由于从数据库中获取数据可能会导致错误,您必须始终将结果集处理语句包括在一个 try 块中。 您可以多种形式获取 ResultSet 中的数据,这取决于每个列中存储的数据类型。另外,您可以按列序号或列名获取列的内容。请注意,列序号从 1 开始,而不是从 0 开始。ResultSet 对象的一些最常用方法如下所示。 getInt(int); 将序号为 int 的列的内容作为整数返回。 getInt(String); 将名称为 String 的列的内容作为整数返回。 getFloat(int); 将序号为 int 的列的内容作为一个 float 型数返回。 getFloat(String); 将名称为 String 的列的内容作为 float 型数返回。 getDate(int); 将序号为 int 的列的内容作为日期返回。 getDate(String); 将名称为 String 的列的内容作为日期返回。 next(); 将行指针移到下一行。如果没有剩余行,则返回 false。 Close(); 关闭结果集。 getMetaData(); 返回 ResultSetMetaData 对象。 ResultSetMetaData 您使用 getMetaData() 方法从 ResultSet 中获取 ResultSetMetaData 对象。您可以使用此对象获得列的数目和类型以及每一列的名称。 getColumnCount(); 返回 ResultSet 中的列数。 getColumnName(int); 返回列序号为 int 的列名。 getColumnLabel(int); 返回此列暗含的标签。 isCurrency(int); 如果此列包含带有货币单位的一个数字,则返回 true。 isReadOnly(int); 如果此列为只读,则返回 true。 isAutoIncrement(int); 如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。 getColumnType(int); 返回此列的 SQL 数据类型。这些数据类型包括 BIGINT BINARY BIT CHAR DATE DECIMAL DOUBLE FLOAT INTEGER LONGVARBINARY LONGVARCHAR NULL NUMERIC OTHER REAL SMALLINT TIME TIMESTAMP TINYINT VARBINARY VARCHAR DatabaseMetaData DatabaseMetaData 对象可为您提供整个数据库的信息。您主要用它获取数据库中表的名称,以及表中列的名称。由于不同的数据库支持不同的 SQL 变体,因此,也有多种方法查询数据库支持哪些 SQL 方法。 getCatalogs() 返回该数据库中的信息目录列表。使用 JDBC-ODBC Bridge 驱动程序,您可以获得用 ODBC 注册的数据库列表。这很少用于 JDBC-ODBC 数据库。 getTables(catalog, schema,tableNames, columnNames) 返回表名与 tableNames 相符而且列名与 columnNames 相符的所有表的说明。 getColumns(catalog, schema,tableNames, columnNames) 返回表名与 tableNames 相符而且列名与 columnNames 相符的所有表列说明。 getURL(); 获得您所连接的 URL 名称。 getDriverName(); 获得您所连接的数据库驱动程序的名称。 获取有关表的信息 您可以使用 DataBaseMetaData 的 getTables() 方法来获取数据库中表的信息。这个方法有如下4个 String 参数: results =dma.getTables(catalog, schema, tablemask, types[]); 其中参数的意义是: Catalog 要在其中查找表名的目录名。对于 JDBC-ODBC 数据库以及许多其他数据库而言,可将其设置为 null。这些数据库的目录项实际上是它在文件系统中的绝对路径名称。 Schema 要包括的数据库“方案”。许多数据库不支持方案,而对另一些数据库而言,它代表数据库所有者的用户名。一般将它设置为 null。 Tablemask 一个掩码,用来描述您要检索的表的名称。如果您希望检索所有表名,则将其设为通配符 %。请注意,SQL 中的通配符是 % 符号,而不是一般 PC 用户的 * 符号。 types[] 这是描述您要检索的表的类型的 String 数组。数据库中通常包括许多用于内部处理的表,而对作为用户的您没什么价值。如果它是空值,则您会得到所有这些表。如果您将其设为包含字符串“TABLES”的单元素数组,您将仅获得对用户有用的表格。 一个简单的 JDBC 程序 我们已经学习了 JDBC 的所有基本功能,现在我们可以编写一个简单的程序,该程序打开数据库,打印它的表名以及某一表列的内容,然后对该数据库执行查询。此程序如下所示: package skydevkit; import java.sql.*; public class JdbcOdbc_test { ResultSet results; ResultSetMetaData rsmd; DatabaseMetaData dma; Connection con; public JdbcOdbc_test() throws SQLException { String url = "jdbc:odbc:Northwind"; try { //加载 JDBC-ODBC 桥驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection(url);//连接数据库 dma = con.getMetaData();//获取数据库的元数据 System.out.println("Connected to:" + dma.getURL()); System.out.println("Driver " + dma.getDriverName()); } catch (Exception e) { System.out.println(e); } try { Statement stmt = con.createStatement(); results = stmt.executeQuery("select * from 客户;"); ResultSetMetaData resultMetaData = results.getMetaData(); int cols = resultMetaData.getColumnCount(); String resultRow = ""; for (int i = 1; i < cols; i++) { resultRow += resultMetaData.getColumnName(i) + ";"; } System.out.println(resultRow); while (results.next()) { resultRow = ""; for (int i = 1; i < cols; i++) { try { resultRow += results.getString(i) + ";"; } catch (NullPointerException e) { System.out.println(e.getMessage()); } } System.out.println(resultRow); } } catch (Exception e) { System.out.println("query exception"); } finally { results.close(); } } } 补充高级内容 关于调用SQLServer存储过程的例子:(用到了我们开发的数据库连接类) CREATE PROCEDURE [dbo].[sp_getStudentByName](@name char(10)) AS Select * from Students where [Name]=@name GO DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost", 1433, "demo", "sa", "")); Connection con = DbO.getConnection(); CallableStatement pstmt = null; System.out.println("TestDB1()............"); /* try { pstmt = con.prepareCall("{call sp_getStudentById(?)}"); pstmt.setInt(1, 1); }*/ try { pstmt = con.prepareCall("{call sp_getStudentByName(?)}"); //注意参数如何传递 pstmt.setString(1, "Tom"); } …… 使用输出参数: CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS insert into Students([Name],[Age]) values (@name,@age) select @id=@@IDENTITY GO try { pstmt = con.prepareCall("{call sp_insertStudent(?,?,?)}"); pstmt.setString(1, "zengqingsong"); pstmt.setInt(2, 22); pstmt.registerOutParameter(3, Types.INTEGER); pstmt.executeUpdate(); int id = pstmt.getInt(3); System.out.println(id); } 使用返回参数的例子: CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS insert into Students([Name],[Age]) values (@name,@age) select @id=@@IDENTITY –测试输出参数 return 30 –测试返回30 GO try { pstmt = con.prepareCall("{?=call sp_insertStudent(?,?,?)}"); pstmt.setString(2, "zengqingsong"); pstmt.setInt(3, 22); pstmt.registerOutParameter(4, Types.INTEGER); pstmt.registerOutParameter(1, Types.INTEGER); int ret = pstmt.executeUpdate(); //执行影响的行数 int ret2 = pstmt.getInt(1); //返回参数(输出参数) int id = pstmt.getInt(4); //输出参数 System.out.println(ret); System.out.println(ret2); System.out.println(id);
2023-06-16 14:32:223

MSSQL中的dbo是什么角色?怎么以其他用户进去后建立的表还是dbo.xxxxxx?

dbo是指db owner,也就是数据库所有者。你在建立表时,上面工具栏上第二项的“表和索引属性”,点进去,里面有“所有者”,把它改成你自己的用户就行了。
2023-06-16 14:32:381

关于SQL server 中的dbo、guest个是什么,他们都有什么功能,有请各位朋友给个详细的回答,先谢了!

不是很清楚,应该是管理权限什么的吧,就像是你电脑的账号,管理员,客户什么的
2023-06-16 14:33:032

SQL2000数据库出现只供dbo使用怎么解决

dbo 就是 database owner 数据库的 所有者你不是它有所有人,所以不让你操作可以 右键→属性 改变它 或者以 所在者 身份登录 就可以了
2023-06-16 14:33:141

为什么C#中数据库sql语句中在表的前面加上.dbo,不加也能正常执行,两者有什么区别!

dbo是指数据库所有者database owner,是具有在数据库中执行所有活动的暗示性权限的用户。所以,你在数据库中的所有操作,涉及到表名,如果没有加所有者,那么默认所有者就是dbo。因为,其他所有者的表,必须加所有者,而dbo,可以省略所有者。
2023-06-16 14:33:232

sql server2000中执行sql语句时发现系统会在表名前自动加上“dbo.”,什么意思?

所有者http://zhidao.baidu.com/question/30738303.html
2023-06-16 14:33:302

在sql中sys.与dbo.有什么区别,是一个指架构一个指表吗?

架构是指包含表、视图、过程等的容器。sys是包含系统对象的架构。dbo是用户默认架构,sysadmin 固定服务器角色的所有成员都有默认架构 dbo.
2023-06-16 14:33:401

pb select错误 dbo错误

肯定是权限问题。你可以直接在SQLSERVER的查询脚本测试一下。使用你的用户,查询你所说的几个表。select dbo.students.id,dbo.students.name,dbo.students.age from dbo.students看看用你的用户,这个语句会不会报一样的错误,你用户的权限比较低,强行使用DBO用户查询,肯定不行。
2023-06-16 14:33:491

怎么判断sql数据库是否存在,存在删除

如何判断数据库是否存在 执行下列的SQL,获得一张表,根据表的行数来判断。select * from master..sysdatabases where name=N"所查询的数据库名"if exists(select * from master.dbo.sysdatabases where name = "yexinwinners")begindrop database yexinwinnersprint "yexinwinners己存在,己被删除"endelsebegincreate database yexinwinnerson primary(name = yexinwinners_mdf,filename = "c:yexinwinners.mdf",size = 10mb,maxsize = 50mb,filegrowth = 25%)log on(name = yexinwinners_ldf,filename = "c:yexinwinners.ldf",size = 10mb,maxsize = 50mb,filegrowth = 25%)print "yexinwinners 数据库创建成功"end
2023-06-16 14:33:562

如何对一个已经存在的SQL Server表分区

有两种方法可以实现对一个表分区.一是创建一个新的标识为分区表的表(你可参照此步骤),然后把数据复制到这张新表,再对这两张表分别改名.或者,像我写在下面的,通过重建或创建一个聚集索引来达到分区一个表.一个SQL Server表和数据进行分区示例--Table/Index creationCREATE TABLE [dbo].[TABLE1] ([pkcol] [int] NOT NULL, [datacol1] [int] NULL, [datacol2] [int] NULL, [datacol3] [varchar](50) NULL, [partitioncol] datetime)GOALTER TABLE dbo.TABLE1 ADD CONSTRAINT PK_TABLE1 PRIMARY KEY CLUSTERED (pkcol) GOCREATE NONCLUSTERED INDEX IX_TABLE1_col2col3 ON dbo.TABLE1 (datacol1,datacol2) WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
2023-06-16 14:34:121

创建 对于 用户“dbo”失败。错误: 15023

int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf("original array is: "); for(i=0;i<10;i++)  printf("%5d",a[i]); printf(" "); printf("insert a new number:"); scanf("%d",&number);
2023-06-16 14:34:351

SQL中调用函数时是不是一定要加上dbo?

表函数不用,其它需要 表函数不用,其它需要 --dbo是SCHEMA_NAME结构描术,这是创建者定义的
2023-06-16 14:34:562

Sql 行列转换

http://wenku.baidu.com/view/451b23f4f705cc17552709d0.html这里有答案
2023-06-16 14:35:043

sql语句中什么时候要加dbo.什么时候不需要加啊

"select * from users Where UserAccount=" + """ + UserName + """ + "And UserPwd=" + """ + strMd5 + """ select * from users Where UserAccount="UserName1" And UserPwd="Md5Pwd" 这就是从c#翻译过来的sql语句,其中单引号间表示数据库中的字符类使用,比如id like "aaa001",双引号表示c#里面的字符串。数据库中的字符类的比较建议使用LIKE,不要用= select * from users Where UserAccount Like "UserName1" And UserPwd Like "Md5Pwd"(在user表中查找用户名为"UserName1"并且经过MD5加密后的密文为"Md5Pwd"的记录,若存在,表示该用户用户名与密码一致,允许登录系统
2023-06-16 14:35:561

我用pb连接的sql2003的数据库,表前面怎么都多了dbo,怎么去掉啊!

我估计你连的是:SQL 2005或更高版本,在2005或后期版本中(包括ORACLE),打开PB数据窗口中的SQL语句都会加上dbo.开头,没关系,这不影响你的程序。
2023-06-16 14:36:042

sql server 数据库怎么复制dbo

方式一、如果写代码select * into [目标数据库B].DBO.表名 from. [源数据库A].DBO.表名方式二、如果不写代码,可以用导入的方式复制表结构(如果目标数据库已经存在,此步跳过)1、打开并连接Sql Server,在源数据库DATA_A(源数据库名称)上右键,然后依次点击“编写表脚本为”→“CREATE到”→“新查询编辑器窗口”。2、在第1步产生的编辑器中按”crtl+a“组合键全选内容,然后右键“复制“(或按"crtl+c"键)。3、新建查询,然后右键“粘贴”(或ctrl+v);如图所示,将代码中DATA_A(源数据库名)改为DATA_B(目标数据库名)。接着右键单击”执行“执行代码。4、在目标数据库的表结构中就可以看到被复制过来的表了。表的数据内容复制选中目标数据库DATA_B然后点击”任务“→”导入数据“。进入”SQL Server导入导出向导“,根据提示步骤操作。选择数据源(源数据库)。选择目标(目标数据库)、指定表复制或查询。选择源表和源视图:设置源表和目标表后,单击“编辑映射”按钮,在弹出窗口中选中“启用标识插入”。(否则后面会出错)一直点击“下一步”至最后完成操作。
2023-06-16 14:36:141

dbo模式中,运营服务器结束至颁发合同完成证书的时间应不超过几天

DBO:是指设计(Design)-建造(Build)-运营(Operation)的简称,指的是承包商在业主手中以某一合理总价承包设计并建造一个公共设施或基础设施,并且负责运营该设施,满足在该设施试用期间公共部门的运作要求。承包商负责设计的维修保养以及更换在合同期内已经超过其使用期的资产,在该合同期满后,资产所有权交回业主或公共部门。DBO的特点可概括为“单一责任”和“功能保证”。DBO合同中的承包商承担设计、建造和运营的责任,对项目是否达到预定的技术和进度要求负责,由于DBO中的设计-建造部分采用总价包干的方式,他也必须对项目的建造费用控制负责,并通过运营的考验确保将来向业主移交一个符合运营要求的设施。(一)
2023-06-16 14:36:234

sql2005中dbo问题

返回表函数可以这样去掉dbo,标量值函数是需要加上dbo所有者
2023-06-16 14:36:321

mysql中有sys,sue,dbo么?

mysql中有sys,sue,dbo么? - MYSQL中,有没有像在MSSQL的master.dbo.sysdatabases 保存着所有的数据库名称, xxxxxxx.dbo.sysobjects这样保存着所有的表名字段名等信息的系统表
2023-06-16 14:36:421

sql2005数据库中创建表时为何会在原表名前加上一个dbo.的东西,这是什么意思

默认架构名,默认的用户Sa具有权限,不需理会这个架构名
2023-06-16 14:36:502

什么是DBO模式

DBO(即设计、建设、运营)DBO是个非常好的想法,因为市场化后,谁投资谁负责建设、运营,让投资人自己选择工艺,可以将投资、建设、运营一揽子考虑,政府已经选定的工艺可不一定就是造价最低、运营最优的工艺。
2023-06-16 14:37:123

sql中 dbo 是什么意思

表的所有者
2023-06-16 14:37:366

sql中 dbo 是什么意思

表的所有者
2023-06-16 14:38:056

简单问题 SqlServer中的dbo是什么东西

dbo是sqlserver中最垃圾的东西了,也是微软一直是单用户产品的表现
2023-06-16 14:38:293

SQL中FROM数据库名.dbo.表名,其中dbo作用与含义是什么呢

SQL中FROM数据库名.dbo.表名的DBO相当于用户名,以所有者身份使用表
2023-06-16 14:38:361

SQL中FROM数据库名.dbo.表名,其中dbo作用与含义是什么呢

它应该是数据库对象吧!一般它是系统默认的,
2023-06-16 14:38:453

sql server 2005 中删除对于用户的dbo失败怎么办

在删除SQL Server用户时,有时会报错:Microsoft SQL Server错误: 15138删除对于用户失败,数据库主体在该数据库中拥有架构,无法删除。删除 对于 用户“*****”失败。 (Microsoft.SqlServer.Smo) 。下面将为您介绍两种的解决方法。其他信息:执行 Transact-SQL 语句或批处理时发生了异常。 (Microsoft.SqlServer.ConnectionInfo)解决方法一先删除此用户对应的架构,然后在删除对应的用户步骤1。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 构架,先删除对应的构架2。SQL SERVER MANAGEMENT STUDIO -> 数据库 -> 安全性 -> 用户,删除对应的用户解决方法二–执行如下SQL语句ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo;–然后手动删除就可以了。
2023-06-16 14:38:541

DBO和GUEST这两个特殊的数据库用户的含义是什么

dbodatabase owner数据库的创建者,创建该对象的用户.guest顾客能够访问数据库中对象的数据,要求dbo分配权限给guest,一般给他查看的权限select
2023-06-16 14:39:021

sqlserver中的表所有者不是dbo怎么改成dbo的

1:从下面的图片中就可以看出来,当前这个选中的表的所有者是"dxkj",并不是dbo,所以现在要把这个表的所有者改回dbo的,在该表上点击右键,选择“设计”,如下图:2:右键点击表名然后选择设计表,如下图3:在工具
2023-06-16 14:39:101

sql数据表里的所有者一般为“dbo”可以改成其他的吗

可以的 还可以改成SA权限只要你加了用户就可以更改
2023-06-16 14:39:181

数据库怎么获得?什么是数据库

什么是数据库? 数据库是以某种文件结构存储的一系列信息表,这种文件结构使您能够访问这些表、选择表中的列、对表进行排序以及根据各种标准选择行。数据库通常有多个 索引与这些表中的许多列相关联,所以我们能尽可能快地访问这些表。 以员工记录为例,您可以设想一个含有员工姓名、地址、工资、扣税以及津贴等内容的表。让我们考虑一下这些内容可能如何组织在一起。您可以设想一个表包含员工姓名、地址和电话号码。您希望保存的其它信息可能包括工资、工资范围、上次加薪时间、下次加薪时间、员工业绩评定等内容。 这些内容是否应保存在一个表格中?几乎可以肯定不应该如此。不同类别的员工的工资范围可能没有区别;这样,您可以仅将员工类型储存在员工记录表中,而将工资范围储存在另一个表中,通过类型编号与这个表关联。考虑以下情况: Key Lastname SalaryType SalaryType Min Max 1 Adams 2 1 30000 45000 2 Johnson 1 2 45000 60000 3 Smyth 3 3 60000 75000 4 Tully 1 5 Wolff 2 SalaryType 列中的数据引用第二个表。我们可以想象出许多种这样的表,如用于存储居住城市和每个城市的税值、健康计划扣除金额等的表。每个表都有一个主键列(如上面两个表中最左边的列)和若干数据列。在数据库中建立表格既是一门艺术,也是一门科学。这些表的结构由它们的范式指出。我们通常说表属于1NF、2NF 或 3NF。 第一范式:表中的每个表元应该只有一个值(永远不可能是一个数组)。(1NF) 第二范式:满足 1NF,并且每一个非主键列完全依赖于主键列。这表示主键和该行中的剩余表元之间是 1 对 1 的关系。(2NF) 第三范式:满足 2NF,并且所有非主键列是互相独立的。任何一个数据列中包含的值都不能从其他列的数据计算得到。(3NF) 现在,几乎所有的数据库都是基于“第三范式 (3NF)”创建的。这意味着通常都有相当多的表,每个表中的信息列都相对较少。 从数据库中获取数据 假设我们希望生成一个包含员工及其工资范围的表,在我们设计的一个练习中将使用这个表。这个表格不是直接存在在数据库中,但可以通过向数据库发出一个查询来构建它。我们希望得到如下所示的一个表: Name Min Max Tully $30,000.00 $45,000.00 Johnson $30,000.00 $45,000.00 Wolff $45,000.00 $60,000.00 Adams $45,000.00 $60,000.00 Smyth $60,000.00 $75,000.00 我们发现,获得这些表的查询形式如下所示 SELECT DISTINCTROW Employees.Name, SalaryRanges.Min, SalaryRanges.Max FROM Employees INNER JOIN SalaryRanges ON Employees.SalaryKey = SalaryRanges.SalaryKey ORDER BY SalaryRanges.Min; 这种语言称为结构化查询语言,即 SQL,而且它是几乎目前所有数据库都可以使用的一种语言。SQL-92 标准被认为是一种基础标准,而且已更新多次。 数据库的种类 PC 上的数据库,如 dBase、Borland Paradox、Microsoft Access 和 FoxBase。 数据库服务器:IBM DB/2、Microsoft SQL Server、 Oracle、Sybase、SQLBase 和 XDB。 所有这些数据库产品都支持多种相对类似的 SQL 方言,因此,所有数据库最初看起来好象可以互换。每种数据库都有不同的性能特征,而且每一种都有不同的用户界面和编程接口。 ODBC 如果我们能够以某种方式编写不依赖于特定厂商的数据库的代码,并且能够不改变自己的调用程序即可从这些数据库中得到相同的结果,那将是一件很好的事。如果我们可以仅为所有这些数据库编写一些封装,使它们具有相似的编程接口,这种对数据库编程独立于供应商的特性将很容易实现。 什么是 JDBC? JDBC 是对 ODBC API 进行的一种面向对象的封装和重新设计,它易于学习和使用,并且它真正能够使您编写不依赖厂商的代码,用以查询和操纵数据库。尽管它与所有 Java API 一样,都是面向对象的,但它并不是很高级别的对象集. 除 Microsoft 之外,多数厂商都采用了 JDBC,并为其数据库提供了 JDBC 驱动程序;这使您可轻松地真正编写几乎完全不依赖数据库的代码。另外,JavaSoft 和 Intersolv 已开发了一种称为 JDBC-ODBC Bridge 的产品,可使您连接还没有直接的 JDBC 驱动程序的数据库。支持 JDBC 的所有数据库必须至少可以支持 SQL-92 标准。这在很大程度上实现了跨数据库和平台的可移植性。 安装和使用 JDBC JDBC 的类都被归到 java.sql 包中,在安装 Java JDK 1.4时会自动安装。然而,如果您想使用 JDBC-ODBC 桥。JDBC-ODBC 驱动程序可从 Sun 的 Java 网站 (http://java.sun.com/) 轻松地找到并下载。在您扩充并安装了这个驱动程序后,必须执行下列步骤: 将 jdbc-odbcclasses; 路径添加到您的 PATH 环境变量中。 将 jdbc-odbcclasses; 路径添加到您的 CLASSPATH 环境变量中。 JDBC 驱动程序的类型 Java 程序连接数据库的方法实际上有四种: 1. JDBC-ODBC 桥和 ODBC 驱动程序 -- 在这种方式下,这是一个本地解决方案,因为 ODBC 驱动程序和桥代码必须出现在用户的每台机器中。从根本上说这是一个临时解决方案。 2. 本机代码和 Java 驱动程序 -- 它用另一个本地解决方案(该平台上的 Java 可调用的本机代码)取代 ODBC 和 JDBC-ODBC 桥。 3. JDBC 网络的纯 Java 驱动程序 -- 由 Java 驱动程序翻译的 JDBC 形成传送给服务器的独立协议。然后,服务器可连接任何数量的数据库。这种方法使您可能从客户机 Applet 中调用服务器,并将结果返回到您的 Applet。在这种情况下,中间件软件提供商可提供服务器。 4. 本机协议 Java 驱动程序 -- Java 驱动程序直接转换为该数据库的协议并进行调用。这种方法也可以通过网络使用,而且可以在 Web 浏览器的 Applet 中显示结果。在这种情况下,每个数据库厂商将提供驱动程序。 如果您希望编写代码来处理 PC 客户机数据库,如 dBase、Foxbase 或 Access,则您可能会使用第一种方法,并且拥有用户机器上的所有代码。更大的客户机-服务器数据库产品(如 IBM 的 DB2)已提供了第 3 级别的驱动程序。 两层模型和三层模型 当数据库和查询它的应用程序在同一台机器上,而且没有服务器代码的干预时,我们将生成的程序称为两层模型。一层是应用程序,而另一层是数据库。在 JDBC-ODBC 桥系统中通常是这种情况。 当一个应用程序或 applet 调用服务器,服务器再去调用数据库时,我们称其为三层模型。当您调用称为“服务器”的程序时通常是这种情况。 编写 JDBC 代码访问数据库 用 ODBC 注册您的数据库 连接数据库 所有与数据库有关的对象和方法都在 java.sql 包中,因此在使用 JDBC 的程序中必须加入 "import java.sql.* "。 JDBC 要连接 ODBC 数据库,您必须首先加载 JDBC-ODBC 桥驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 该语句加载驱动程序,并创建该类的一个实例。然后,要连接一个特定的数据库,您必须创建 Connect 类的一个实例,并使用 URL 语法连接数据库。 String url = "jdbc:odbc:Northwind"; Connection con = DriverManager.getConnection(url); 请注意,您使用的数据库名是您在 ODBC 设置面板中输入的“数据源”名称。 URL 语法可能因数据库类型的不同而变化极大。 jdbc:subprotocol:subname 第一组字符代表连接协议,并且始终是 jdbc。还可能有一个子协议,在此处,子协议被指定为 odbc。它规定了一类数据库的连通性机制。如果您要连接其它机器上的数据库服务器,可能也要指定该机器和一个子目录: jdbc:bark//doggie/elliott 最后,您可能要指定用户名和口令,作为连接字符串的一部分: jdbc:bark//doggie/elliot;UID=GoodDog;PWD=woof 访问MSSQL Server方法:(驱动程序需要:msutil.jar,msbase.jar,mssqlServer.jar) DBDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver URL=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo username=sa password= maxcon=10 mincon=1 poolName=SkyDev 利用我们开发的数据库类,使用方法如下: DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost", 1433, "demo", "sa", "")); Connection con = DbO.getConnection(); //类代码(不含连接工厂实现) package skydev.modules.data; public final class SqlServerConnectionFactory extends ConnectionFactory { private final String dbDriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver"; private String host; private int port; private String databaseName; public SqlServerConnectionFactory() { super.setDriverName(dbDriver); } /** * * @param host 数据库所在的主机名:如"localhost" * @param port SQL服务器运行的端口号,如果使用缺省值 1433,传入一个负数即可 * @param databaseName 数据库名称 * @param userName 用户名 * @param password 口令 */ public SqlServerConnectionFactory(String host, int port, String databaseName, String userName, String password) { this.setHost(host); this.setPort(port); this.setDatabaseName(databaseName); this.setUserName(userName); this.setPassword(password); init(); } private void init() { super.setDriverName(dbDriver); super.setUrl("jdbc:microsoft:sqlserver://" + host.trim() + ":" + new Integer(port).toString() + ";DatabaseName=" + databaseName.trim()); //super.setUrl("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=demo"); } …… //------------------------------------------------------------------------------------ 访问MySQL的方法: DBDriver=com.mysql.jdbc.Driver URL=jdbc:mysql://localhost/demo username= password= maxcon=5 mincon=1 poolName=zhengmao 访问数据库 一旦连接到数据库,就可以请求表名以及表列的名称和内容等信息,而且您可以运行 SQL 语句来查询数据库或者添加或修改其内容。可用来从数据库中获取信息的对象有: DatabaseMetaData 有关整个数据库的信息:表名、表的索引、数据库产品的名称和版本、数据库支持的操作。 ResultSet 关于某个表的信息或一个查询的结果。您必须逐行访问数据行,但是您可以任何顺序访问列。 ResultSetMetaData 有关 ResultSet 中列的名称和类型的信息。 尽管每个对象都有大量的方法让您获得数据库元素的极为详细的信息,但在每个对象中都有几种主要的方法使您可获得数据的最重要信息。然而,如果您希望看到比此处更多的信息,建议您学习文档以获得其余方法的说明。 ResultSet ResultSet 对象是 JDBC 中最重要的单个对象。从本质上讲,它是对一个一般宽度和未知长度的表的一种抽象。几乎所有的方法和查询都将数据作为 ResultSet 返回。ResultSet 包含任意数量的命名列,您可以按名称访问这些列。它还包含一个或多个行,您可以按顺序自上而下逐一访问。在您使用 ResultSet 之前,必须查询它包含多少个列。此信息存储在 ResultSetMetaData 对象中。 //从元数据中获得列数 ResultSetMetaData rsmd; rsmd = results.getMetaData(); numCols = rsmd.getColumnCount(); 当您获得一个 ResultSet 时,它正好指向第一行之前的位置。您可以使用 next() 方法得到其他每一行,当没有更多行时,该方法会返回 false。由于从数据库中获取数据可能会导致错误,您必须始终将结果集处理语句包括在一个 try 块中。 您可以多种形式获取 ResultSet 中的数据,这取决于每个列中存储的数据类型。另外,您可以按列序号或列名获取列的内容。请注意,列序号从 1 开始,而不是从 0 开始。ResultSet 对象的一些最常用方法如下所示。 getInt(int); 将序号为 int 的列的内容作为整数返回。 getInt(String); 将名称为 String 的列的内容作为整数返回。 getFloat(int); 将序号为 int 的列的内容作为一个 float 型数返回。 getFloat(String); 将名称为 String 的列的内容作为 float 型数返回。 getDate(int); 将序号为 int 的列的内容作为日期返回。 getDate(String); 将名称为 String 的列的内容作为日期返回。 next(); 将行指针移到下一行。如果没有剩余行,则返回 false。 Close(); 关闭结果集。 getMetaData(); 返回 ResultSetMetaData 对象。 ResultSetMetaData 您使用 getMetaData() 方法从 ResultSet 中获取 ResultSetMetaData 对象。您可以使用此对象获得列的数目和类型以及每一列的名称。 getColumnCount(); 返回 ResultSet 中的列数。 getColumnName(int); 返回列序号为 int 的列名。 getColumnLabel(int); 返回此列暗含的标签。 isCurrency(int); 如果此列包含带有货币单位的一个数字,则返回 true。 isReadOnly(int); 如果此列为只读,则返回 true。 isAutoIncrement(int); 如果此列自动递增,则返回 true。这类列通常为键,而且始终是只读的。 getColumnType(int); 返回此列的 SQL 数据类型。这些数据类型包括 BIGINT BINARY BIT CHAR DATE DECIMAL DOUBLE FLOAT INTEGER LONGVARBINARY LONGVARCHAR NULL NUMERIC OTHER REAL SMALLINT TIME TIMESTAMP TINYINT VARBINARY VARCHAR DatabaseMetaData DatabaseMetaData 对象可为您提供整个数据库的信息。您主要用它获取数据库中表的名称,以及表中列的名称。由于不同的数据库支持不同的 SQL 变体,因此,也有多种方法查询数据库支持哪些 SQL 方法。 getCatalogs() 返回该数据库中的信息目录列表。使用 JDBC-ODBC Bridge 驱动程序,您可以获得用 ODBC 注册的数据库列表。这很少用于 JDBC-ODBC 数据库。 getTables(catalog, schema,tableNames, columnNames) 返回表名与 tableNames 相符而且列名与 columnNames 相符的所有表的说明。 getColumns(catalog, schema,tableNames, columnNames) 返回表名与 tableNames 相符而且列名与 columnNames 相符的所有表列说明。 getURL(); 获得您所连接的 URL 名称。 getDriverName(); 获得您所连接的数据库驱动程序的名称。 获取有关表的信息 您可以使用 DataBaseMetaData 的 getTables() 方法来获取数据库中表的信息。这个方法有如下4个 String 参数: results =dma.getTables(catalog, schema, tablemask, types[]); 其中参数的意义是: Catalog 要在其中查找表名的目录名。对于 JDBC-ODBC 数据库以及许多其他数据库而言,可将其设置为 null。这些数据库的目录项实际上是它在文件系统中的绝对路径名称。 Schema 要包括的数据库“方案”。许多数据库不支持方案,而对另一些数据库而言,它代表数据库所有者的用户名。一般将它设置为 null。 Tablemask 一个掩码,用来描述您要检索的表的名称。如果您希望检索所有表名,则将其设为通配符 %。请注意,SQL 中的通配符是 % 符号,而不是一般 PC 用户的 * 符号。 types[] 这是描述您要检索的表的类型的 String 数组。数据库中通常包括许多用于内部处理的表,而对作为用户的您没什么价值。如果它是空值,则您会得到所有这些表。如果您将其设为包含字符串“TABLES”的单元素数组,您将仅获得对用户有用的表格。 一个简单的 JDBC 程序 我们已经学习了 JDBC 的所有基本功能,现在我们可以编写一个简单的程序,该程序打开数据库,打印它的表名以及某一表列的内容,然后对该数据库执行查询。此程序如下所示: package skydevkit; import java.sql.*; public class JdbcOdbc_test { ResultSet results; ResultSetMetaData rsmd; DatabaseMetaData dma; Connection con; public JdbcOdbc_test() throws SQLException { String url = "jdbc:odbc:Northwind"; try { //加载 JDBC-ODBC 桥驱动程序 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection(url);//连接数据库 dma = con.getMetaData();//获取数据库的元数据 System.out.println("Connected to:" + dma.getURL()); System.out.println("Driver " + dma.getDriverName()); } catch (Exception e) { System.out.println(e); } try { Statement stmt = con.createStatement(); results = stmt.executeQuery("select * from 客户;"); ResultSetMetaData resultMetaData = results.getMetaData(); int cols = resultMetaData.getColumnCount(); String resultRow = ""; for (int i = 1; i < cols; i++) { resultRow += resultMetaData.getColumnName(i) + ";"; } System.out.println(resultRow); while (results.next()) { resultRow = ""; for (int i = 1; i < cols; i++) { try { resultRow += results.getString(i) + ";"; } catch (NullPointerException e) { System.out.println(e.getMessage()); } } System.out.println(resultRow); } } catch (Exception e) { System.out.println("query exception"); } finally { results.close(); } } } 补充高级内容 关于调用SQLServer存储过程的例子:(用到了我们开发的数据库连接类) CREATE PROCEDURE [dbo].[sp_getStudentByName](@name char(10)) AS Select * from Students where [Name]=@name GO DbObject DbO = new DbObject(new SqlServerConnectionFactory("localhost", 1433, "demo", "sa", "")); Connection con = DbO.getConnection(); CallableStatement pstmt = null; System.out.println("TestDB1()............"); /* try { pstmt = con.prepareCall("{call sp_getStudentById(?)}"); pstmt.setInt(1, 1); }*/ try { pstmt = con.prepareCall("{call sp_getStudentByName(?)}"); //注意参数如何传递 pstmt.setString(1, "Tom"); } …… 使用输出参数: CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS insert into Students([Name],[Age]) values (@name,@age) select @id=@@IDENTITY GO try { pstmt = con.prepareCall("{call sp_insertStudent(?,?,?)}"); pstmt.setString(1, "zengqingsong"); pstmt.setInt(2, 22); pstmt.registerOutParameter(3, Types.INTEGER); pstmt.executeUpdate(); int id = pstmt.getInt(3); System.out.println(id); } 使用返回参数的例子: CREATE PROCEDURE [dbo].[sp_insertStudent](@name char(10),@age int,@id int OUTPUT) AS insert into Students([Name],[Age]) values (@name,@age) select @id=@@IDENTITY –测试输出参数 return 30 –测试返回30 GO try { pstmt = con.prepareCall("{?=call sp_insertStudent(?,?,?)}"); pstmt.setString(2, "zengqingsong"); pstmt.setInt(3, 22); pstmt.registerOutParameter(4, Types.INTEGER); pstmt.registerOutParameter(1, Types.INTEGER); int ret = pstmt.executeUpdate(); //执行影响的行数 int ret2 = pstmt.getInt(1); //返回参数(输出参数) int id = pstmt.getInt(4); //输出参数 System.out.println(ret); System.out.println(ret2); System.out.println(id);参考资料:http://zhidao.baidu.com/question/2050414.html
2023-06-16 14:39:401

sql2008如何更改所有者为dbo

创建存储过程中开头:如 create procedure[dbo].[p_usersAdd]
2023-06-16 14:39:471