SQL Server 5种常见的约束
SQLServer 中有五种约束,Primary Key 约束、Foreign Key 约束、Unique 约束、Default 约束和Check 约束,用SQL Server2008 来演示下这几种约束的创建和使用的方法。
1、Primary Key 约束
在表中常有一列或多列的组合,其值能唯一标识表中的每一行。
这样的一列或多列成为表的主键(PrimaryKey)。一个表只能有一个主键,而且主键约束中的列不能为空值。只有主键列才能被作为其他表的外键所创建。
创建主键约束可以右键单击表,选择设计。
选中要创建主键的列,然后单击上面的小钥匙。
也可以右键需要创建主键的列,然后单击小钥匙。
2、Foreign Key 约束
外键约束是用来加强两个表(主表和从表)的一列或多列数据之间的连接的。创建外键约束的顺序是先定义主表的主键,然后定义从表的外键。也就是说只有主表的主键才能被从表用来作为外键使用,被约束的从表中的列可以不是主键,主表限制了从表更新和插入的操作。
右键单击需要设置外键的列(此时的表是作为从表在外键中出现),选择关系。
接下来点击添加--> 表和列规范。
在主键表中选择主表和主表的主键列。
设置完后保存即可。
3、Unique 约束
唯一约束确保表中的一列数据没有相同的值。与主键约束类似,唯一约束也强制唯一性,但唯一约束用于非主键的一列或者多列的组合,且一个表可以定义多个唯一约束。
右键单击要设置的列选择索引/ 键。
然后单击添加按钮。
选择需要设置的列,可以是一列也可以是多列的组合。
关闭并保存设置。
4、Default 约束
若在表中定义了默认值约束,用户在插入新的数据行时,如果该行没有指定数据,那么系统将默认值赋给该列,如果我们不设置默认值,系统默认为NULL 。
以学生信息表为例,在表设计器中,为性别sex 列填写默认值男。
5、Check 约束
Check 约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围。在列中更新数据时,所要输入的内容必须满足Check 约束的条件,否则将无法正确输入。以学生信息表中的sex 为例,我们要限制sex 列的值只能为男或女。
SQLServer(多语句表值函数代码) 代码如下: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go CREATE FUNCTION [dbo].[ufnGetContactInformation](@ContactID int) RETURNS @retContactInformation TABLE ( -- Columns returned by the function [ContactID] int PRIMARY KEY NOT NULL, [FirstName] [nvarchar](50) NULL, [LastName] [nvarchar](50) NULL, [JobTitle] [nvarchar](50) NULL, [ContactType] [nvarchar](50) NULL ) AS -- Returns the first name, last name, job title and contact type for the specified contact. BEGIN
DECLARE @FirstName [nvarchar](50), @LastName [nvarchar](50), @JobTitle [nvarchar](50), @ContactType [nvarchar](50); -- Get common contact information SELECT @ContactID = ContactID, @FirstName = FirstName, @LastName = LastName FROM [Person].[Contact] WHERE [ContactID] = @ContactID; SET @JobTitle = CASE -- Check for employee WHEN EXISTS(SELECT * FROM [HumanResources].[Employee] e WHERE e.[ContactID] = @ContactID) THEN (SELECT [Title] FROM [HumanResources].[Employee] WHERE [ContactID] = @ContactID) -- Check for vendor
SQLSERVER数据库操作 ******操作前,请确定SQL的服务已经开启******** 一:登录进入sql数据库 1、开始---所有程序---Microsoft SQL Server 2005---SQL Server Management Studio Express 2、此时出现“连接到服务器”的对话框, “服务器名称”设置为SQL数据库所在机器的IP地址 “身份验证”设置为SQL Server身份验证或者Windows 身份验证 填写登录名和密码后,点击“连接”按钮,即可进入到SQL数据库操作界面。 二:新建数据库 登录进去后,右击“数据库”,选择—“新建数据库” 设置数据库名称,在下面的选项卡中还可以设置数据库的初始大小,自动增长,路径。 点击确定,一个数据库就建好了。 三:如何备份的数据库文件。 登录进入后,右击相应的需要备份数据库----选择“任务” 目标下的备份到,点击“添加”按钮可以设置备份数据库保存的路径。 四:如何还原备份的数据库文件。(以本地机器为例子) 1、设置服务器名称,点击右边的下拉框的三角,选择“浏览更多…”。 此时出现查找服务器对话框,选择“本地服务器”---点开“数据库引擎”前面 的三角---选中出现的服务器名称—确定。 (注:可以在“网络服务器”选项卡中设置网络服务器) 2、设置身份验证,选择为“windows身份验证” 3、点击连接按钮,进入数据库管理页面 4、右击“数据库”,选择“还原数据库”,出现还原数据库的对话框 还原的目标----目标数据库,这里设置数据库的名字 还原的源----选择“源设备”,在弹出的对话框中点击“添加”按钮,找到所备 份的数据库文件,确定。 5、此时,在还原数据库对话框中会出现所还原的数据库的信息。在前面选中所需还 原的数据库。确定。 6、为刚刚还原的数据库设置相应的用户。 a点开“安全性”---右击“登录名”---新建登录名 b 设置登录名(假如为admin),并设置为SQL Server身份验证,输入密码,去除 “强制实施密码策略”前的勾。 C 找到导入的数据库,右击此数据库----选择“属性”,在选择页中,点击“文件” 设置所有者,点击右边的按钮,选择“浏览”,找到相应的用户(如admin)。确 定。。 7、此时重新以admin的身份进入,就可操作相应的数据库。
约束和约束反力 1.限制物体位移的周围物体称为该物体的约束.(放在桌子上的书,轨道支撑车轮,轴承限制轴) 2.结束物体的作用称为该物体的约束反力.(桌子对书,轨道对车轮,轴承对轴的作用力) 3.位移受到限制的物体称为非自由体.(书,车轮,轴) 4.空间的位移不受任何限制称为自由体.(飞机,炮弹,火箭) 结束约束反力的方向一定与约束所能限制物体位移的方向相反. 图3 曲柄冲
二、几种常见的约束类型 1.柔体约束 由柔软的绳索、链条或胶带等构成的约束。由于柔体只能限制物体沿柔体伸长方向运动,故只能承受拉力 约束反力特点:作用点在柔体与被约束物体接触处,作用线沿柔体中心方向背离被约束物体。柔体约束只能承受拉力 2.光滑接触表面的约束 光滑接触面约束时,不论接触面形状如何,都不能限制物体沿接
触面切线方向运动,而只能限制物体沿接触面公法线方向运动 图1-19 光滑接触面约束 图1-20 齿面约束 约束反力的特点:通过接触点,沿接触面公法线方向指向被约束物体3.光滑铰链约束 铰链:工程中常见约束,有两个钻有圆孔的构件和圆柱形销子所构成 1-销钉2-构件 图1-21 铰链约束
此类约束只能限制物体在垂直于销钉轴线的平面内移动而不能限制绕销钉转动 约束反力的特点 当外力作用在垂直销钉轴线的平面内时,约束反力过铰链的中心,指向不定,可以用正交分解的两个分力来表示 1)固定铰链支座 3.固定部分 图1-22 固定铰链支座 图1-23 2)活动铰链支座 该约束是在铰链支座与光滑支撑面之间,装有几个辊轴而构成
的,又称辊轴支座。滚动支座的约束性质与光滑面约束相同,其约束反力必垂直于支撑面,且通过铰链中心 图1-24 活动铰链支座 3)铰链连接(中间铰) 若构成铰链的两构件都可绕销钉转动,这种铰链为铰链连接。其约束反力特点与固定铰支座相同。用过铰链中心、正交分解的两个反力表示 图1-25 铰链约束 4)球铰链约束 圆球和球壳连接构成球铰链约束。此类约束限制球心任何方向的位移。其约束力通过球心,但方向不能确定,通常由三个正交分量表示
日志总结 项目搭建 一、项目搭建: 1、先把所需的j a r全部找到,导入l i b中。 2、把数据库的驱动包(所需包根据所选数据库而定)导入。 3、设置配置文件 4、建立测试类 二、项目搭建,测试时的错误: j a v a.l a n g.I l l e g a l S t a t e E x c e p t i o n: F a i l e d t o l o a d A p p l i c a t i o n C o n t e x t C a u s e d b y: o r g.s p r i n g f r a m e w o r k.b e a n s.f a c t o r y.B e a n C r e a t i o n E x c e p t i o n:E r r o r c r e a t i n g b e a n w i t h n a m e'u s e r D a o':I n j e c t i o n o f r e s o u r c e d e p e n d e n c i e s f a i l e d;n e s t e d e x c e p t i o n i s o r g.s p r i n g f r a m e w o r k.b e a n s.f a c t o r y.B e a n C r e a t i o n E x c e p t i o n:E r r o r c r e a t i n g b e a n w i t h n a m e's e s s i o n F a c t o r y'd e f i n e d i n c l a s s p a t h r e s o u r c e [a p p l i c a t i o n C o n t e x t-c o m m o n.x m l]: I n v o c a t i o n o f i n i t m e t h o d f a i l e d;n e s t e d e x c e p t i o n i s j a v a.l a n g.A b s t r a c t M e t h o d E r r o r: c o m.m i c r o s o f t.j d b c.b a s e.B a s e D a t a b a s e M e t a D a t a.s u p p o r t s G e t G e n e r a t e d K e y s()Z C a u s e d b y: o r g.s p r i n g f r a m e w o r k.b e a n s.f a c t o r y.B e a n C r e a t i o n E x c e p t i o n:E r r o r c r e a t i n g b e a n w i t h n a m e's e s s i o n F a c t o r y'd e f i n e d i n c l a s s p a t h r e s o u r c e [a p p l i c a t i o n C o n t e x t-c o m m o n.x m l]: I n v o c a t i o n o f i n i t m e t h o d f a i l e d;n e s t e d e x c e p t i o n i s j a v a.l a n g.A b s t r a c t M e t h o d E r r o r: c o m.m i c r o s o f t.j d b c.b a s e.B a s e D a t a b a s e M e t a D a t a.s u p p o r t s G e t G e n e r a t e d K e y s()Z C a u s e d b y: j a v a.l a n g.A b s t r a c t M e t h o d E r r o r: c o m.m i c r o s o f t.j d b c.b a s e.B a s e D a t a b a s e M e t a D a t a.s u p p o r t s G e t G e n e r a t e d K e y s()Z 解决方案: Caused by: https://www.doczj.com/doc/808930996.html,ng.AbstractMethodError: com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z
四种常见约束类型的约束反力 工程中约束的种类很多,对于一些常见的约束,根据其特性可归纳为下列四种基本类型。 一、柔性约束(柔索) 1、组成:由柔性绳索、胶带或链条等柔性物体构成。 2、约束特点:只能受拉,不能受压。 3、约束反力方向:作用在接触点,方向沿着柔体的中心线背离物体。通常用FT表示。见图1-8 二、光滑面约束(刚性约束) 1、组成:由光滑接触面构成的约束。当两物体接触面之间的摩擦力小到可以忽略不计时,可将接触面视为理想光滑的约束。 2、约束特点:不论接触面是平面或曲面,都不能限制物体沿接触面切线方向的运动,而只能限制物体沿着接触面的公法线指向约束物体方向的运动。 3、约束反力方向:通过接触点,沿着接触面公法线方向,指向被约束的物体,通常用FN表示。 三、光滑圆柱形铰链约束
1、组成:两物体分别钻有直径相同的圆柱形孔,用一圆柱形销钉连接起来,在不计摩擦时,即构成光滑圆柱形铰链约束,简称铰链约束。 2、约束特点:这类约束的本质为光滑接触面约束,因其接触点位置未定,故只能确定铰链的约束反力为一通过销钉中心的大小和方向均无法预先确定的未知力。通常此力就用两个大小未知的正交分力来表示。如图1-10所示。 3、铰链约束分类:这类约束有连接铰链、固定铰链支座、活动铰链支座等。 (1)连接铰链(中间铰链)约束 两构件用圆柱形销钉连接且均不固定,即构成连接铰链,其约束反力用两个正交的分力Fx和Fy表示, 2. 固定铰链支座约束 如果连接铰链中有一个构件与地基或机架相连,便构成固定铰链支座,其约束反力仍用两个正交的分力Fx和Fy 表示., 如图1-11所示。 固定铰支座的几种表示
动态语句基本语法 1 :普通SQL语句可以用exec执行 Select * from tableName exec('select * from tableName') exec sp_executesqlN'select * from tableName' -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL declare @fnamevarchar(20) set @fname = 'FiledName' Select @fname from tableName -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。exec('select ' + @fname + ' from tableName') -- 请注意加号前后的单引号的边上加空格 当然将字符串改成变量的形式也可 declare @fnamevarchar(20) set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句会报错 declare @s Nvarchar(1000) -- 注意此处改为nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- 成功 exec sp_executesql @s -- 此句正确 3. 输出参数 declare @numint, @sqlsnvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何将exec执行结果放入变量中? declare @numint, @sqlsnvarchar(4000) set @sqls='select @a=count(*) from tableName ' execsp_executesql @sqls,N'@aint output',@num output select @num 1 :普通SQL语句可以用Exec执行例: Select * from tableName Exec('select * from tableName')
SQLServer 2008以上误操作数据库恢复方法——日志尾部备份 问题: 经常看到有人误删数据,或者误操作,特别是update和delete的时候没有加where,然后就喊爹喊娘了。人非圣贤孰能无过,做错可以理解,但不能纵容,这个以后再说,现在先来解决问题。遇到这种情况,一般都是没有做备份,不然也不会来发问了。首先要冷静,否则会有更大的灾难。直到你放弃。 解决方法: 对于这类问题,主要是找回误操作之前的数据,在2008之前,有个很出名的工具Log Exploer,听说还挺好用的,这个网上大把教程,这里就不多说了。但是唯一遗憾的是,不支持2008及更高版本,这时除了其他第三方工具,那么最常用的就是本文提到的方法——日志尾部备份。本文实验环境2008R2,对于2008及其以上版本可以使用这个方法,其实2005也可以,2000很少用,没试过,只是2008之前可以使用Log Exploer,所以就没必要用这种方法。 下面图文并茂讲解操作方法,至于原理,不属于本文范围,而且我相信真遇到误操作的时候,估计没人会看原理了。 步骤: (1)、检查数据库的恢复模式,如图:
或者使用脚本检查: 1.SELECT recovery_model,recovery_model_desc 2.FROM sys.databases 3.WHERE name='AdventureWorks' 结果如下: 确保数据库的恢复模式最起码不能为【简单】。至于如何修改成完整模式,我觉得这些应该没必要多说了。 切记,对于任何重要环境,不仅仅是客户正式环境(俗称生产环境),都强烈建议使用【完整恢复模式】,虽然对于另外两种(大容量日志(BULK_LOGGED)、简单(SIMPLE))来说,完整恢复模式产生的日志会大,但是在出现问题的时候,就会觉得这些都不算什么了。并且我也想不到任何理由对于正式环境不使用完整恢复模式。只要管理得当,完整恢复模式的日志也不会太变态。 (2)、这里其实隐含另外一步,曾经做过最少一次的完整备份。因为所有类型的备份都基于完整备份,如果没有最少一次完整备份,其他类型的备份都是多余的,所以在这里强调一下,在创建完一个新数据库之后,强烈建议甚至强制做一次完整备份。 1.SELECT database_name,recovery_model,name 2.FROM msdb.dbo.backupset 使用上面的语句粗略可以看到有那些数据库做过备份,由于测试,所以做了几次备份,可以看到我这个时间点已经做了备份了。 (3)、确保别人不再连接数据库,然后做一次日志尾部备份: 首先先创建一点数据: [sql]view plaincopyprint?
SQLSERVER数据库、表的创建及SQL语句命令 SQLSERVER数据库,安装、备份、还原等问题: 一、存在已安装了sql server 2000,或2005等数据库,再次安装2008,会出现的问题 1、卸载原来的sql server 2000、2005,然后再安装sql server 2008,否则经常sql server服务启动不了 2、sql server服务启动失败,解决方法: 进入sql server configure manager,点开Sql server 网络配置(非sql native client 配置),点sqlzhh(我sqlserver 的名字)协议,将VIA协议禁用。再启动Sql Server服务,成功 如图: 二、在第一次安装SQLSERVER2008结束后,查看安装过程明细,描述中有较多项插件或程度,显示安装失败。 解决方法:
1、重新启动安装程度setup.exe,选择进行修复安装,至完成即可。 三、先创建数据库XXX,再进行还原数据库时,选择好备份文件XXX.bak,确定后进行还原,会报如下图的错误。 解决方法: 选择好备份数据库文件后,再进入“选项”中,勾选“覆盖现在数据库”即可。
四、查看数据库版本的命令:select @@version 在数据库中,点击“新建查询”,然后输入命令,执行结果如下 五、数据库定义及操作命令: 按照数据结构来组织、存储和管理数据的仓库。由表、关系以及操作对象组成,把数据存放在数据表中。 1、修改数据库密码的命令: EXEC sp_password NULL, '你的新密码', 'sa' sp_password Null,'sa','sa'
Sql Server 常用函数 1,统计函数avg, count, max, min, sum 2, 3,多数聚会不统计值为null的行。可以与distinct一起使用去掉重复的行。可以与group by 来分组4, 5, 2,数学函数 6, 7, SQRT 8, ceiling(n) 返回大于或者等于n的最小整数 9, floor(n), 返回小于或者是等于n的最大整数 10,round(m,n), 四舍五入,n是保留小数的位数 11,abs(n) 12,sign(n), 当n>0, 返回1,n=0,返回0,n<0, 返回-1 13,PI(), 3.1415.... 14,rand(),rand(n), 返回0-1之间的一个随机数 15,3,字符串函数 16, 17,ascii(), 将字符转换为ASCII码, ASCII('abc') = 97 18,char(), ASCII 码转换为字符 19,low(),upper() 20,str(a,b,c)转换数字为字符串。a,是要转换的字符串。b是转换以后的长度,c是小数位数。 str(123.456,8,2) = 123.46 21,ltrim(), rtrim() 去空格 22,left(n), right(n), substring(str, start,length) 截取字符串 23,charindex(子串,母串),查找是否包含。返回第一次出现的位置,没有返回0 24,patindex('%pattern%', expression) 功能同上,可是使用通配符 25,replicate('char', rep_time), 重复字符串 26,reverse(char),颠倒字符串 27,replace(str, strold, strnew) 替换字符串 28,space(n), 产生n个空行 29,stuff(), SELECT STUFF('abcdef', 2, 3, 'ijklmn') ='aijklmnef', 2是开始位置,3是要从原来串中删除的字符长度,ijlmn是要插入的字符串。 30,3,类型转换函数: 31, 32,cast, cast( expression as data_type), Example: 33,SELECT SUBSTRING(title, 1, 30) AS Title, ytd_sales FROM titles WHERE CAST(ytd_sales AS char(20)) LIKE '3%' 34,convert(data_type, expression) 35,4,日期函数 36, 37,day(), month(), year() 38,dateadd(datepart, number, date), datapart指定对那一部分加,number知道加多少,date指定在谁的基础上加。datepart的取值包括,
SQL Server数据库连接失败错误及解决方法 在使用SQL Server 的过程中,用户遇到的最多的问题莫过于连接失败了。一般而言,有以下两种连接SQL Server 的方式,一是利用SQL Server 自带的客户端工具,如企业管理器、查询分析器、事务探查器等;二是利用用户自己开发的客户端程序,如ASP 脚本、VB程序等,客户端程序中又是利用ODBC 或者OLE DB 等连接SQL Server。下面,我们将就这两种连接方式,具体谈谈如何来解决连接失败的问题。 一、客户端工具连接失败 在使用SQL Server 自带的客户端工具(以企业管理器为例)连接SQL Server时,最常见的错误有如下一些: 1、SQL Server 不存在或访问被拒绝 ConnectionOpen (Connect()) 2、用户'sa'登录失败。原因:未与信任SQL Server 连接相关联。
3、超时已过期。 下面我们依次介绍如何来解决这三个最常见的连接错误。 第一个错误"SQL Server 不存在或访问被拒绝"通常是最复杂的,错误发生的原因比较多,需要检查的方面也比较多。一般说来,有以下几种可能性: 1、SQL Server名称或IP地址拼写有误; 2、服务器端网络配置有误; 3、客户端网络配置有误。 要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因。 首先,检查网络物理连接: ping <服务器IP地址> 或者 ping <服务器名称> 如果ping <服务器IP地址> 失败,说明物理连接有问题,这时候要检查硬件设备,如网卡、HUB、路由器等。还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如ISA Server。防火墙软件可能会屏蔽对ping、telnet 等的响应,因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口。
SQL SERVER函数大全 SQL SERVER命令大全 SQLServer和Oracle的常用函数对比 1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select floor(-1.001) value from dual 4.取整(截取) S:select cast(-1.002 as int) value O:select trunc(-1.002) value from dual 5.四舍五入 S:select round(1.23456,4) value 1.23460 O:select round(1.23456,4) value from dual 1.2346 6.e为底的幂 S:select Exp(1) value 2.7182818284590451 O:select Exp(1) value from dual 2.71828182 7.取e为底的对数 S:select log(2.7182818284590451) value 1 O:select ln(2.7182818284590451) value from dual; 1 8.取10为底对数 S:select log10(10) value 1 O:select log(10,10) value from dual; 1 9.取平方 S:select SQUARE(4) value 16 O:select power(4,2) value from dual 16
SQLServer语句优化 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 我们把这种正文内容本身就是一种按照一定规则排列的目录称为“聚集索引”。 需要两个过程,先找到目录中的结果,然后再翻到您所需要的页码。我们把这种目录纯粹是目录,正文纯粹是正文的排序方式称为“非聚集索引”。 下面的表总结了何时使用聚集索引或非聚集索引(很重要): 动作描述使用聚集索引使用非聚集索引 列经常被分组排序应应 返回某范围内的数据应不应 一个或极少不同值不应不应 小数目的不同值应不应 大数目的不同值不应应 频繁更新的列不应应 外键列应应 主键列应应 频繁修改索引列不应应 事实上,我们可以通过前面聚集索引和非聚集索引的定义的例子来理解上表。如:返回某范围内的数据一项。比如您的某个表有一个时间列,恰好您把聚合索引建立在了该列,这时您查询2004年1月1日至2004年10月1日之间的全部数据时,这个速度就将是很快的,因为您的这本字典正文是按日期进行排序的,聚类索引只需要找到要检索的所有数据中的开头和结尾数据即可;而不像非聚集索引,必须先查到目录中查到每一项数据对应的页码,然后再根据页码查到具体内容。 结合实际,谈索引使用的误区 理论的目的是应用。虽然我们刚才列出了何时应使用聚集索引或非聚集索引,但在实践中以上规则却很容易被忽视或不能根据实际情况进行综合分析。下面我们将根据在实践中遇到的实际问题来谈一下索引使用的误区,以便于大家掌握索引建立的方法。 1、主键就是聚集索引 这种想法笔者认为是极端错误的,是对聚集索引的一种浪费。虽然SQL SERVER默认是在主键上建立聚集索引的。 通常,我们会在每个表中都建立一个ID列,以区分每条数据,并且这个ID列是自动增大的,步长一般为1。我们的这个办公自动化的实例中的列Gid就是如此。此时,如果我们将这个列设为主键,SQL SERVER会将此列默认为聚集索引。这样做有好处,就是可以让您的数据在数据库中按照ID进行物理排序,但笔者认为这样做意义不大。 显而易见,聚集索引的优势是很明显的,而每个表中只能有一个聚集索引的规则,这使得聚集索引变得更加珍贵。 从我们前面谈到的聚集索引的定义我们可以看出,使用聚集索引的最大好处就是能够根据查询要求,迅速缩小查询范围,避免全表扫描。在实际应用中,因为ID号是自动生成的,我们并不知道每条记录的ID号,所以我们很难在实践中用ID号来进行查询。这就使让ID号这个主键作为聚集索引成为一种资源浪费。其次,让每个ID号都不同的字段作为聚集索引也不符合“大数目的不同值情况下不应建立聚合索引”规则;当然,这种情况只是针对用户经常修改记录内容,特别是索引项的时候会
系统连接sqlserver数据库问题解决方案 一、首先检查 1、网络不通,不能ping通服务器。检查HUB或路由器是否正常工作。检查其它机子是否网络通。检查网线的可能性问题。本地连接是否启用? 2、检查防火墙是否把起点软件拦截了。XP系统自带有防火墙可能阻止了软件访问网络。 3、数据库服务是否启动。 4、数据库有无更改密码。 5、数据库中是否存在当前连接的用户数据库。 二、根据软件错误提示检查 以上问题检查无误的话,首先注意连接不上时的提示,起点软件在连接不上数据库时会有一个连接提示错误信息。 1"SQL Server 不存在或访问被拒绝" 这个问题是最常见的,通常是XP2的操作系统+MS SQL SERVER 2000的配置情况下出现这种问题。这个是最复杂的,错误发生的原因比较多,需要检查的方面也比较多。 一般说来,有以下几种可能性: 1,SQL Server名称或IP地址拼写有误 2,服务器端网络配置有误 3,客户端网络配置有误 要解决这个问题,我们一般要遵循以下的步骤来一步步找出导致错误的原因: 首先,检查网络物理连接 ping <服务器IP地址/服务器名称> 如果ping <服务器IP地址> 不成功,说明物理连接有问题,这时候要检查硬件设备,如网卡,HUB,路由器等。
还有一种可能是由于客户端和服务器之间安装有防火墙软件造成的,比如ISA Server。防火墙软件可能会屏蔽对ping,telnet 等的响应 因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口。 如果ping <服务器IP地址> 成功而,ping <服务器名称> 失败 则说明名字解析有问题,这时候要检查DNS 服务是否正常。 有时候客户端和服务器不在同一个局域网里面,这时候很可能无法直接使用服务器名称来标识该服务器,这时候我们可以使用HOSTS文件来进行名字解析, 具体的方法是: 1。使用记事本打开HOSTS文件(一般情况下位于C:\WINNT\system32\drivers\etc)。 添加一条IP地址与服务器名称的对应记录,如: 172。168。10。24 myserver 2。或在SQL Server 的客户端网络实用工具里面进行配置,后面会有详细说明。 其次,使用telnet 命令检查SQL Server服务器工作状态 telnet <服务器IP地址> 1433 如果命令执行成功,可以看到屏幕一闪之后光标在左上角不停闪动,这说明SQL Server 服务器工作正常,并且正在监听1433端口的TCP/IP 连接 如果命令返回"无法打开连接"的错误信息,则说明服务器端没有启动SQL Server 服务, 也可能服务器端没启用TCP/IP 协议,或者服务器端没有在SQL Server 默认的端口1433上监听。 接着,我们要到服务器上检查服务器端的网络配置,检查是否启用了命名管道。是否启用了TCP/IP 协议等等,可以利用SQL Server 自带的服务器网络使用工具来进行检查。 点击:程序Microsoft SQL Server 服务器网络使用工具,打开该工具后,在"常规"中可以看到服务器启用了哪些协议。 一般而言,我们启用命名管道以及TCP/IP 协议。 点中TCP/IP 协议,选择"属性",我们可以来检查SQK Server 服务默认端口的设置
在SQL Server在线图书或者在线帮助系统中,函数的可选参数用方括号表示。在下列的CONVERT()函数例子中,数据类型的length和style参数是可选的: CONVERT (data-type [(length)], expression[,style]) 可将它简化为如下形式,因为现在不讨论如何使用数据类型: CONVERT(date_type, expression[,style]) 根据上面的定义,CONVERT()函数可接受2个或3个参数。因此,下列两个例子都是正确的: SELECT CONVERT(Varchar(20),GETDATE()) SELECT CONVERT(Varchar(20),GETDATE(), 101) 这个函数的第一个参数是数据类型Varchar(20),第2个参数是另一个函数GETDATE()。GETDATE()函数用datetime数据类型将返回当前的系统日期和时间。第2条语句中的第3个参数决定了日期的样式。这个例子中的101指以mm/dd/yyyy格式返回日期。本章后面将详细介绍GETDATE()函数。即使函数不带参数或者不需要参数,调用这个函数时也需要写上一对括号,例如GETDATE()函数。注意在书中使用函数名引用函数时,一定要包含括号,因为这是一种标准形式。 确定性函数 由于数据库引擎的内部工作机制,SQL Server必须根据所谓的确定性,将函数分成两个不同的组。这不是一种新时代的信仰,只和能否根据其输入参数或执行对函数输出结果进行预测有关。如果函数的输出只与输入参数的值相关,而与其他外部因素无关,这个函数就是确定性函数。如果函数的输出基于环境条件,或者产生随机或者依赖结果的算法,这个函数就是非确定性的。例如,GETDATE()函数是非确定性函数,因为它不会两次返回相同的值。为什么要把看起来简单的事弄得如此复杂呢?主要原因是非确定性函数与全局变量不能在一些数据库编程对象中使用(如用户自定义函数)。部分原因是SQL Server缓存与预编译可执行对象的方式。例如,即席查询可以使用任何函数,不过如果打算构建先进的、可重用的编程对象,理解这种区别很重要。 以下这些函数是确定性的: ●?AVG()(所有的聚合函数都是确定性的) ●?CAST() ●?CONVERT() ●?DATEADD() ●?DATEDIFF() ●?ASCII() ●?CHAR() ●?SUBSTRING() 以下这些函数与变量是非确定性的: ●?GETDATE()
解决此问题的几个关键点如下: 1、该现象只会出现在NTFS文件系统中。 2、由NTFS文件系统的访问权限导致。 一般手工操作的解决方案如下: 1、控制面板—>文件夹选项—>查看关闭“使用简单文件共享(推荐)” 2、选择存放数据库文件的文件夹,右键选择属性,这时会多出一个“安全”选项卡,选择最后一个用户,将该用户的权限设为“完全控制”。
经过这两步操作后,数据库附加失败或附加后只读的问题即可解决。 下面重点讲这两步,用C#代码的实现,因为当我们为项目打包后,不可能让用户手工来执行这些操作 1、C#关闭简单文件共享的代码实现 在百度、Google搜索此问题解决方法时,很多的操作方法并不正确,经过自己实际操作测试,正确方法如下: 注册表文件: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "forceguest"=dword:00000000 批处理: reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v forceguest /t REG_WORD /d 0x00000000 /f 如果选中此项,则将上述 0x00000000 改为 0x00000001。 通过修改注册表的方式实现代码如下: Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine; Microsoft.Win32.RegistryKey software =
ResultSet 接口提供用于从当前行获取列值的获取方法(getBoolean、getLong 等)。可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,每列只能读取一次。 对于获取方法,JDBC 驱动程序尝试将底层数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。JDBC 规范有一个表,显示允许的从 SQL 类型到ResultSet 获取方法所使用的 Java 类型的映射关系。 用查询从包含 sqlvariant 数据类型列的表中检索数据,则会发生异常。 Getter 方法转换
基于 SQL Server 2005 的数据类型,以下图表包含 SQLServerResultSet 类的get
易语言操作SQL Server 数据库全过程 最近看到很多初学者在问在易语言中如何操作SQL Serve以外部数据库,也有人提出想要个全面的操作过程,为了让大家能够尽快上手,我给大家简单介绍一下操作SQL的过程,希望能起到抛砖引玉的作用。 由于我本身工作业比较忙,就以我目前做的一个软件的部份内容列给大家简单讲讲吧,高手就不要笑话了,只是针对初学者 第步,首先需要建立一个数据库: 以建立一个员工表为例,各字段如下 3 员工ID int 4 0 0 登陆帐号nvarchar 30 1 0 密码nvarchar 15 1 0 所属部门nvarchar 30 1 0 姓名nvarchar 10 1 0 性别nvarchar 2 1 0 年龄nvarchar 10 1 0 当前职务nvarchar 10 1 0 级别nvarchar 10 1 0 出生日期nvarchar 40 1 0 专业nvarchar 10 1 0 学历nvarchar 8 1 0 婚姻状况nvarchar 4 1 0 身份证号nvarchar 17 1 0 籍贯nvarchar 50 1 0 毕业院校nvarchar 50 1 0 兴趣爱好nvarchar 600 1 0 电话nvarchar 11 1 0 家庭成员nvarchar 20 1 0 工作经历nvarchar 600 1 0 销售行业经验nvarchar 600 1 0 离职原因nvarchar 600 1 0 升迁记录nvarchar 600 1 0 调岗记录 打+ -rd nvarchar 600 1 0 特殊贡献nvarchar 600 1 0 奖励记录nvarchar 600 1 0 处罚记录nvarchar 600 1 0 同事关系nvarchar 4 1 0 企业忠诚度nvarchar 4 1 0 入司日期nvarchar 30 1 0 在职状态nvarchar 4 1 0 上级评语nvarchar 600 1 0 最后登陆时间nvarchar 20 1 0 登陆次数nvarchar 50 1 0 照片image 16 1 一般我习惯用nvarchar,因为这是可变长的的非Unicode数据,最大长度为8000个字符,您可以根
本文由我司收集整编,推荐下载,如有疑问,请与我司联系Sqlserver 2016 R Service环境安装的各种错误(坑)解决办法2017/06/28 1 相信很多朋友都会慕名Sqlserver 2016的R语言功能,将自己的数据库升级到Sqlserver 2016,但是当你安装完Sqlserver 2016的R语言组件之后,你会发现并不能直接使用,比如当你在SSMS中执行下面这段测试R语言命令的时候,Sqlserver 2016会各种报错。。。 ?exec sp_execute_external_script @language =N’R’, @script=N’OutputDataSet -InputDataSet’, @input_data_1 =N’select 1 as hello’ with result sets (([hello] int not null)); go ?本人也是折腾了好久最终才成功在Sqlserver 2016中执行了R语言。 ?首先如果你要启用Sqlserver的R语言功能,必须要启动Sqlserver的两个服务:?1.Sqlserver实例数据库引擎服务: ?2.Sqlserver实例SQL Server Lanuchpad服务: ? ?启动这两个服务之后,还要在SSMS中执行下面这段SQL脚本,才能在Sqlserver 中开启执行外部脚本(R语言)的功能。注意执行完这段脚本后要重启数据库引擎服务和SQL Server Lanuchpad服务才会正式生效: ?Exec sp_configure ‘external scripts enabled’, 1;reconfigure; ?如果你在安装Sqlserver 2016的时候,安装路径中如果出现了空格,那么恭喜你。。。你还需要修改一个系统配置文件,否者Sqlserver 2016 的R语言运行时会报错。。。 ?比如我安装Sqlserver 2016的时候安装路径为D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER ?那么找到文件D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\rlauncher.config ?使用操作系统管理员权限启动记事本(notepad),打开rlauncher.config,找到WORKING_DIRECTORY这一项修改为一个不带空格的文件夹路径,这里我使用了