sqlserver数据库问题

合集下载

sqlserver数据库死锁解决方法

sqlserver数据库死锁解决方法

在 SQL Server 数据库中,死锁是两个或多个事务在尝试获取资源时相互阻塞的现象。

死锁会导致事务执行效率降低。

要解决SQL Server 中的死锁问题,可以尝试以下方法:1. 分析死锁:使用 SQL Server Profiler 或 Extended Events 追踪死锁事件,找出导致死锁的事务和资源。

分析完后,针对性地解决死锁问题。

1. 优化锁的粒度:使用较低级别的锁,如行锁(ROWLOCK),代替页面锁或表锁,减少锁定范围,提高并发性。

请注意,这也可能会导致锁争用和事务延迟。

1. 使用 READ COMMITTED SNAPSHOT 或 SNAPSHOT 事务隔离级别:这可以将读取操作与其他事务隔离,以减少锁定冲突。

复制更新时,仍然需要锁定资源,但其他读取事务不会受到阻塞。

1. 保持事务简短并减少锁定时间:缩短事务持续时间,减少锁定资源的时间。

这有助于减少因事务阻塞而导致的死锁风险。

1. 按照相同的顺序访问资源:按照相同的顺序对资源进行加锁可以避免死锁。

这样,在任何给定时刻,事务只需要等待另一个事务释放钥匙,而不是陷入死循环。

1. 使用 TRY...CATCH 语句监视死锁错误:对执行事务的代码进行异常处理,并在TRY...CATCH 语句中处理死锁错误。

这意味着如果死锁发生,事务将被捕获并显示错误信息。

根据需求,可以选择重试事务以处理死锁。

1. 使用 NOLOCK 选项:对于查询只读的情况,可以尝试使用 NOLOCK 选项进行查询。

这允许读取未提交的数据,避免发生死锁。

请注意,这可能会导致脏读问题。

在使用 NOLOCK 之前,务必权衡一下使用该选项所带来的风险。

解决 SQL Server 数据库死锁问题需要针对具体情况进行分析和调整。

对数据库表和事务进行优化,根据实际应用场景选择适当的锁策略,有助于降低死锁的发生概率。

在确保数据完整性的前提下,采取上述方法之一或多个来解决死锁问题。

SQLServer数据库试题及答案

SQLServer数据库试题及答案

SQLServer数据库试题及答案选择题:(20分)1、根据关系数据基于的数据模型——关系模型的特征判断下列正确的一项:(___)A、只存在一对多的实体关系,以图形方式来表示。

B、以二维表格结构来保存数据,在关系表中不允许有重复行存在。

C、能体现一对多、多对多的关系,但不能体现一对一的关系。

D、关系模型数据库是数据库发展的最初阶段。

2、在“连接”组中有两种连接认证方式,其中在(___)方式下,需要客户端应用程序连接时提供登录时需要的用户标识和密码。

A、Windows身份验证B、SQL Server 身份验证C、以超级用户身份登录时D、其他方式登录时3、SQL Server 2000 在安装之前,应注意的事项:(___)A、SQL Server 2000的任何版本在安装时都不用考虑操作系统的制约。

B、SQL Server 2000的安装对硬件的要求不作任何限制。

C、SQL Server 2000 在安装之前,必须在操作系统级启用TCP/IP。

D、在Windows NT Server 4.0上安装SQL Server 2000时,最低的要求是必须安装Service Pack 4(SP4)以上。

4、关系数据库中,主键是(1___),主键的建立有(2___)种方法,当运用Transact-SQL 语句创建主键时,可以是(3___)。

⑴ A、为标识表中唯一的实体B、创建唯一的索引,允许空值C、只允许以表中第一字段建立D、允许有多个主键的⑵ A、一 B、二 C、三 D、四⑶ A、create table table1(column1 char(13) not null primary,column2 int not) on primary;B、alter table table1 with notcheck addconstraint [PK_table1] primary key nonclustered( column1) on primary;C、alter table table1 column1 primary key ;5、表在数据库中是一个非常重要的数据对象,它是用来(1___)各种数据内容的,数据库创建后就可以创建表了,创建表可以用(2___)等方法来创建。

SQL server数据库连接中的一些问题

SQL server数据库连接中的一些问题

SQL SERVER数据库连接的一些问题Rainboy 整理于2012-11-16一、关于ntwdblib.dll一些编程语言连接SQL SERVER时,需要ntwdblib.dll。

比如用pb连接SQL2005或2008数据库时,可能会出现如下错误提示:unable to load the requested database interface.这不是PB的问题。

需要下载ntwdblib.dll然后将其copy到C:/WINDOWS/system32。

需要注意的是,要要保证ntwdblib.dll 这个文件的版本和sqlserver的版本对应,否则不会出现提示但就是连接不成功,会很郁闷。

下面是对应关系:1.ntwdblib.dll 版本为2000.2.8.0是对应SqlServer2000(这个是网络查资料和猜测,没装2000)3.ntwdblib.dll 版本为2000.80.194.0是对应SqlServer2005(这个是用实验证明可以用,本人就是用笔记本装了2005)4.ntwdblib.dll 版本为2000.80.2039是对应SqlServer2008(这个是猜测没有装2008)二、专用的接口文件如php连接SQLserver 需要php_mssql.dll。

*_mssql.dll可以放在应用程序目录中,也可以放到C:/WINDOWS/system32然后重启服务器。

三、配置SQL SERVER运行SQL Server 配置管理器:SQL Server Configuration Manager,打开协议Protocolsb. 允许命名管道"named pipes" 和"tcp/ip"c. 右键点击"tcp/ip",打开属性Properties 标签"IP addresses"d. 在TCP 动态端口"TCP Dynamic Ports" 填入1433e. 重启SQL Server四、常见问题总结1.Unable to connect to server确认SQLServer2005服务器正常.检查TCP/IP已经启用同时右键查看属性:已经启用是否选择是确认服务器正确之后,再确认ntwdblib.dll 文件位置是否放到了c:/windows/system32下。

sqlserverexception connection reset

sqlserverexception connection reset

"sqlserverexception connection reset" 是一个常见的错误,通常表示在尝试与SQL Server 数据库建立连接时出现了问题。

这个错误可能由多种原因引起,以下是一些可能的原因和解决方法:1. 连接超时:如果连接请求没有在规定的时间内完成,可能会触发此错误。

解决方法:检查网络连接,确保网络稳定。

如果可能,增加连接超时的时间。

2. 服务器繁忙或宕机:如果服务器正在处理大量请求或由于某种原因无法响应,可能会出现此错误。

解决方法:检查服务器的负载和状态,确保服务器正常运行。

3. 客户端与服务器之间的网络问题:网络中断或其他网络问题可能导致此错误。

解决方法:检查网络连接,确保客户端和服务器之间的网络稳定。

4. 连接字符串配置问题:连接字符串中的参数(如端口、主机名等)可能有误。

解决方法:检查并确保连接字符串中的所有参数都是正确的。

5. 驱动程序或客户端问题:使用的驱动程序或客户端可能与SQL Server 不兼容。

解决方法:确保使用的驱动程序或客户端与SQL Server 版本兼容。

6. SQL Server 配置问题:SQL Server 的配置可能不正确,导致无法建立连接。

解决方法:检查SQL Server 的配置,确保它可以接受来自客户端的连接。

7. 防火墙或安全组规则:防火墙或安全组规则可能阻止了连接请求。

解决方法:检查并调整防火墙或安全组规则,确保允许从客户端到服务器的连接。

8. 数据库引擎问题:数据库引擎可能遇到问题,无法处理连接请求。

解决方法:检查数据库引擎的状态和日志,查找并解决潜在的问题。

在尝试解决此问题时,查看详细的错误消息和日志文件通常会提供更多关于问题的线索。

根据具体的错误消息和日志内容,可能还需要进行更深入的调查和调试。

解决SQLSERVER服务不能正常启动

解决SQLSERVER服务不能正常启动

解决SQLSERVER服务不能正常启动SQL Server服务无法正常启动的原因有很多,可能是由于数据库损坏、服务未正确安装、服务配置问题、端口冲突等等。

下面是一些可能的解决方案:1. 检查数据库文件是否损坏:若数据库文件损坏,也可能导致SQL Server服务无法正常启动。

可以尝试通过运行SQL Server Repair工具修复数据库文件。

2. 确保SQL Server服务已正确安装:确认SQL Server服务是否已正确安装。

可以尝试重新安装SQL Server服务,确保使用正确的版本和正确的安装步骤。

3. 确保SQL Server服务配置正确:检查SQL Server服务的配置文件,确保各项参数设置正确,例如数据库文件路径、日志文件路径、端口号等。

4. 检查服务是否已启动:通过控制面板中的“服务”功能,查看SQL Server服务是否已启动。

如果未启动,可以尝试手动启动服务。

5. 检查端口是否被其他程序占用:可能是由于SQL Server服务所需的端口被其他程序占用而无法启动。

可以使用netstat命令或者网络工具检查端口占用情况,并确保SQL Server所需端口未被其他程序使用。

6. 检查防火墙设置:防火墙设置可能会阻止SQL Server服务的正常启动。

可以尝试临时关闭防火墙,然后再次尝试启动SQL Server服务。

7. 检查服务权限设置:确保SQL Server服务的运行账户具有足够的权限。

可以尝试修改服务的运行账户,并为其分配必要的权限。

8. 检查事件日志:查看Windows事件日志,可能会提供有关SQL Server服务启动失败的更多信息。

根据事件日志中的提示,尝试解决问题。

9. 使用SQL Server配置管理器:使用SQL Server配置管理器检查SQL Server实例的配置,包括网络配置、登录配置等。

确保配置正确,并尝试重新启动服务。

10. 尝试使用修复工具:根据具体情况,在Microsoft官方网站上可以找到一些专门用于修复SQL Server服务启动问题的工具,可以尝试使用这些工具进行修复。

SQLServer数据库连接失败错误及解决方法

SQLServer数据库连接失败错误及解决方法

SQL ‎S erve‎r数据库连‎接失败错误‎及解决方法‎在使用‎SQL ‎S erve‎r的过程‎中,用户遇‎到的最多的‎问题莫过于‎连接失败了‎。

一般而言‎,有以下两‎种连接S‎Q L Se‎r ver ‎的方式,一‎是利用S‎Q L Se‎r ver ‎自带的客户‎端工具,如‎企业管理器‎、查询分析‎器、事务探‎查器等;二‎是利用用户‎自己开发的‎客户端程序‎,如ASP‎脚本、V‎B程序等,‎客户端程序‎中又是利用‎ODBC‎或者O‎L E DB‎等连接‎S QL S‎e rver‎。

下面,我‎们将就这两‎种连接方式‎,具体谈谈‎如何来解决‎连接失败的‎问题。

‎一、客户‎端工具连接‎失败‎在使用‎S QL S‎e rver‎自带的客‎户端工具(‎以企业管理‎器为例)连‎接SQL‎Serv‎e r时,最‎常见的错误‎有如下一些‎:‎1、SQL‎Serv‎e r 不存‎在或访问被‎拒绝‎Conn‎e ctio‎n Open‎(Con‎n ect(‎))‎‎2、用‎户'sa'‎登录失败。

‎原因:未与‎信任SQ‎L Ser‎v er 连‎接相关联。

‎‎3‎、超时已过‎期。

‎‎下面我们‎依次介绍如‎何来解决这‎三个最常见‎的连接错误‎。

‎第一个错误‎"SQL ‎S erve‎r不存在‎或访问被拒‎绝"通常是‎最复杂的,‎错误发生的‎原因比较多‎,需要检查‎的方面也比‎较多。

一般‎说来,有以‎下几种可能‎性:‎1、SQ‎L Ser‎v er名称‎或IP地址‎拼写有误;‎2‎、服务器端‎网络配置有‎误;‎3、客户‎端网络配置‎有误。

‎要解决‎这个问题,‎我们一般要‎遵循以下的‎步骤来一步‎步找出导致‎错误的原因‎。

‎首先,检查‎网络物理连‎接:‎ping‎<服务器‎I P地址>‎或‎者‎p ing ‎<服务器名‎称>‎如果p‎i ng <‎服务器IP‎地址> 失‎败,说明物‎理连接有问‎题,这时候‎要检查硬件‎设备,如网‎卡、HUB‎、路由器等‎。

SQLSERVER数据库管理员实操精华题下

SQLSERVER数据库管理员实操精华题下

SQLSERVER数据库管理员实操精华题下SQLSERVER数据库管理员实操精华题下1.【多选题】10分| SQLServer数据库包含一个名为trg_InsertOrders 的触发器,当订购数据被插入到Orders表时,进行触发操作。

此触发器负责确保在将数据插入到Orders表之前,某客户存在于Customers表中。

现在需要配置触发器,阻止其在数据导入进程中进行触发,可以使用哪两个Transact-SQL语句来完成此操作?A ALTERTABLEOrdersDISABLETRIGGERtrg_InsertOrdersB DROPTRIGGERtrg_InsertOrdersC DISABLETRIGGERtrg_InsertOrdersONOrdersD ALTERTRIGGERtrg_InsertOrdersONOrdersNOTFORREPLICATION2.【单选题】10分| 通过一个视图来联接SQLServer数据库中的Customers表和Orders表,需要确保对基础表架构的修改不会对该视图造成影响。

应当如何操作?A 在表内创建CHECK限制B 创建DDL触发器,如果所做的更改影响到视图中的列,则撤销这些更改C 创建视图,指定WITHSCHEMABINDING选项D 创建视图,指定WITHCHECK选项3.【单选题】10分| 某抵押公司需要创建一个SQLServer数据库。

该数据库需要支持基于Web的新应用程序,能够同时处理多达1,000个用户。

该应用程序必须能够快速显示大量计算操作的结果,如计算抵押支付款以及分期付款计划。

为了确保该数据库尽可能快速高效地处理计算,应当如何操作?A 在应用程序中实现参数化Transact-SQL查询。

B 在数据库中实现Transact-SQL存储过程C 在数据库中实现CLR存储过程。

D 实现分布式Web服务。

4.【单选题】10分| 现在需要修改SQLServer数据库中名为Product 的表,并为Product表中添加名为FriendlyName的新列。

数据库教程(SQLServer)课后习题及答案

数据库教程(SQLServer)课后习题及答案

习题13、简述数据库系统的组成。

答:数据库系统一般由数据库、数据库管理系统(及其开发工具)、数据库管理员(DataBase Administrator ,DBA )和用户组成。

4、试述数据库系统的三级模式结构。

这种结构的优点是什么?答:数据库系统的三级模式结构是指数据库系统是由外模式、模式和内模式三级构成,同时包含了二级映像,即外模式/模式映像、模式/内模式映像,如下图所示。

数据库应用1……外模式A 外模式B 模式应用2应用3应用4应用5……模式外模式/模式映像模式/内模式映像数据库系统的这种结构具有以下优点:(1)保证数据独立性。

将外模式与模式分开,保证了数据的逻辑独立性;将内模式与模式分开,保证了数据的物理独立性。

(2)有利于数据共享,减少了数据冗余。

(3)有利于数据的安全性。

不同的用户在各自的外模式下根据要求操作数据,只能对限定的数据进行操作。

(4)简化了用户接口。

按照外模式编写应用程序或输入命令,而不需了解数据库全局逻辑结构和内部存储结构,方便用户系统。

5、什么是数据的物理独立性与逻辑独立性?并说明其重要性。

答:(1)数据的物理独立性是指数据的物理结构(包括存储结构、存取方式等)的改变,存储设备的更换,物理存储的更换,存取方式改变等都不影响数据库的逻辑结构,从而不致引起应用程序的变化。

(2)数据的逻辑独立性是指数据库总体逻辑结构的改变,如修改数据模式,增加新的数据类型、改变数据间联系等,不需要相应修改应用程序。

(3)数据的独立性使得数据库中数据独立于应用程序而不依赖于应用程序,也就是说数据的逻辑结构、存储结构与存取方式的改变不影响应用程序。

相应的,数据的独立性也使得应用程序的编制不再依赖于数据的物理和逻辑结构,提高了应用程序的可移植性与鲁棒性。

从理论上说,数据的独立性可以使数据的组织和应用程序的编制完全分离。

8、什么是数据模型?答:数据模型(Data Model )是一种抽象模型,是对现实世界数据特征的抽象。

SQLServer安装使用报错及解决方案

SQLServer安装使用报错及解决方案

SQLServer安装使用报错及解决方案在SQLServer的安装和使用过程中,可能会遇到一些报错信息,这些问题需要及时解决才能顺利进行数据库的操作。

本文将介绍一些常见的SQLServer安装使用报错,并提供相应的解决方案,帮助读者更好地应对这些问题。

一、无法安装SQLServer在安装SQLServer过程中,有时会出现无法继续安装的情况。

这可能是由于操作系统版本不兼容、安装文件损坏或其他原因引起的。

解决此问题的方案如下:1.检查操作系统版本:确保所使用的操作系统版本与SQLServer的系统要求相匹配。

2.重新下载安装文件:如果安装文件损坏,可尝试重新下载安装文件,并确保下载的文件完整可用。

3.运行安装程序时使用管理员权限:右键点击安装程序,选择“以管理员身份运行”以确保安装过程中拥有足够的权限。

二、无法连接到SQLServer在使用SQLServer时,可能会遇到无法连接到数据库的问题。

这可能是由于网络配置、服务未启动或防火墙设置等原因引起的。

以下是解决此问题的一些常见方法:1.检查网络配置:确保网络连接正常,数据库服务器所在的IP地址、端口号、实例名等配置信息正确。

2.确保SQLServer服务已启动:在Windows服务中,找到SQL Server服务并确认其状态为“运行中”。

3.检查防火墙设置:确保防火墙未阻止数据库连接请求,可在防火墙设置中配置允许使用的端口。

三、数据库文件损坏有时,在使用SQLServer时,数据库文件可能会损坏,导致无法正常读取或写入数据。

以下是一些解决此问题的方法:1.运行数据库维护工具:SQLServer提供了一些内置的维护工具,如SQL Server Management Studio,可用于修复损坏的数据库文件。

2.还原备份文件:如果有可用的备份文件,可以使用SQLServer的还原功能将备份文件还原到正常状态。

3.使用修复命令:SQLServer提供了一些修复命令,如DBCC CHECKDB,可用于检查和修复损坏的数据库文件。

sqlserverexception read timed out -回复

sqlserverexception read timed out -回复

sqlserverexception read timed out -回复[SQLServerException Read Timed Out] - 解决方案和步骤引言:当使用SQLServer连接数据库时,有时会遇到[SQLServerException Read Timed Out]的错误。

这个错误表示连接在读取数据时超时了。

在本文中,我们将详细解释这个错误的原因,并提供解决方案以修复这个问题。

第一步- 理解错误的原因:[SQLServerException Read Timed Out]错误通常是由以下几个原因引起的:1. 网络问题:这可能是最常见的原因之一。

当网络连接不稳定或延迟很高时,连接读取操作可能会超时。

2. 数据库服务器负载过高:当数据库服务器负载过高时,会导致连接响应时间变慢,从而引发连接超时错误。

3. 数据库配置问题:如果数据库配置不正确,比如连接池设置过小或者缓冲区设置不合理,连接超时错误可能会发生。

第二步- 解决网络问题:如果网络问题是导致错误的原因,可以尝试以下解决方法:1. 检查网络连接:确保网络连接是稳定的,并且延迟较低。

可以使用网络测试工具,如ping和traceroute,来评估网络连接的质量。

2. 增加连接超时时间:在数据库连接字符串中,可以增加连接超时时间,以便允许更多的时间用于读取操作。

可以将连接超时时间从默认的30秒增加到60秒或更长。

第三步- 处理负载问题:如果数据库服务器负载过高是造成错误的原因,可以考虑以下解决方法:1. 优化查询性能:通过使用索引、合理编写查询语句和避免不必要的查询,可以提高数据库查询性能,从而降低服务器负载。

2. 增加服务器资源:如果负载问题频繁发生,可以考虑增加数据库服务器的资源,比如增加CPU、内存或者扩展存储容量。

第四步- 检查数据库配置:如果数据库配置不正确是导致错误的原因,可以尝试以下解决方法:1. 调整连接池设置:连接池是用来管理数据库连接的重要组件。

SQLServer数据库连接失败错误及解决方法

SQLServer数据库连接失败错误及解决方法

SQLServer数据库连接失败错误及解决方法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 等的响应,因此在检查连接问题的时候,我们要先把防火墙软件暂时关闭,或者打开所有被封闭的端口。

如果ping 服务器IP地址成功而ping 服务器名称失败,则说明名字解析有问题,这时候要检查DNS 服务是否正常。

SQLSERVER2024数据库可疑的解决步骤

SQLSERVER2024数据库可疑的解决步骤

SQLSERVER2024数据库可疑的解决步骤
1、调整数据库的权限控制:限制对数据库的访问权限,并加强对相关权限的管理,以防止不法利用或者滥用权限。

2、建立备份规则:定期做备份,以防止数据库受损每周、每月或者按照其他定期,都要做定期备份,保留关键数据,以应付突发状况。

3、合理设置数据库安全策略:根据不同的业务特点设定合理的安全策略,并及时调整安全策略,使之保持最新最安全,以防止系统暴露在安全威胁之下。

4、完善用户管理:多数情况下,系统中的可疑行为和一般用户的使用方式是不一样的,因此建立有效的用户管理,以有效检测和预防可疑行为,定期更换用户密码,加强对未经授权用户访问的保护。

5、改进数据库性能:在数据库管理系统中,很多可疑行为都是和数据库性能有关的,因此应该尽可能提高数据库性能,比如,使用存储过程和索引,减少数据库执行查询所需的时间,从而提高数据库的可用性和可靠性。

6、限制SQL语句:确保数据库系统执行的SQL语句是安全的,限制非法、未经授权的SQL语句,如禁止t-sqlIinsert语句,以避免恶意插入或删除数据,避免恶意程序的注入。

SqlServer数据库面试题(一)

SqlServer数据库面试题(一)

SQL面试题目SQL分类:DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句:1、说明:创建数据库CREATE DATABASE database-name2、说明:删除数据库drop database dbname3、说明:备份sql server--- 创建备份数据的deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_1.dat'--- 开始备份BACKUP DATABASE pubs TO testBack4、说明:创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)根据已有的表创建新表:A:create table tab_new like tab_old (使用旧表创建新表)B:create table tab_new as select col1,col2…from tab_old definition only5、说明:删除新表drop table tabname6、说明:增加一个列Alter table tabname add column col type注:列增加后将不能删除。

DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键:Alter table tabname drop primary key(col)8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname注:索引是不可更改的,想更改必须删除重新建。

数据库面试题(SQLSERVER)及答案

数据库面试题(SQLSERVER)及答案

数据库面试题(SQLSERVER)及答案数据库面试题(SQL2005)一、选择题(5分一题,共50分)1、公司A使用SQL Server 2005数据库。

来自贸易伙伴的客户数据每天晚上都要导入到客户表。

你要确保,在导入的过程中,对于存在的客户数据进行更新、对于不存在的客户数据进行插入。

你该怎么做?(B)A. 创建一个FOR触发器。

B. 创建一个INSTEAD OF 触发器。

C. 创建一个 AFTER 触发器。

D. 创建一个 DDL 触发器。

2、你负责维护你们部门SQL Server 2005数据库的调度作业。

其中一个作业从多源为报表聚集数据。

这个作业每日运行,由多步构成。

每一步都为某一特定报表聚集数据。

有用户反映一些报表的数据近期没有更新。

你要确保即使发生错误,聚合数据作业的每一步也都要执行。

那你该如何做?(C)A. 将作业中所有步骤组合成一个每日运行的步骤。

B. 创建一个通知;在每次出现错误时通知你。

以便你能及时更正错误,重启作业。

C. 修改失败使要执行的步骤为“转到下一步”。

D. 设置作业重试当前步骤。

3、你要创建一个SQL Server 2005应用程序来存储和管理法律文件。

原文件以XML文档存于一文件服务器上。

此应用程序用于将文件插入到数据库。

此后,这些文档必须能够从数据库中得到,并与原文件保持一致。

你要设计一个表去存储这些文档数据,该怎样做?(A)A. 将XML文档存于以nvarchar(max)为数据类型的一列中。

B. 分割此XML文档并将其存储于在一个关系结构中。

C. 将XML文档存于以XML为数据类型的一列中。

D. 将XML文档存于以varchar(8000)为数据类型的一列中。

4、你正在写一个查询,从SQL Server 2005数据库表中返回数据。

一些数据存储在关系列中,一些存储在XML数据类型列中。

你的查询需要返回一个关系结果集,其中包含关系域中的数据以及XML数据类型列的属性值。

sqlserver数据库18456错误怎么解决?

sqlserver数据库18456错误怎么解决?
4、右击实例名称(就是下图画红线的部分),选择属性。
5、点安全性,确认选择了SQL SERVER 和Windows身份验证模式。 6、重启SQLSERVER服务(重要)。
精心维护snf快速开发平台组件snfspringnetframework有8年多还有前辈10年的心血50万行经典的业务逻辑积累经过上万次的调试修正公司的实战开发组件越来越好用越来越稳定成熟了
sqlserver数据库 18456错误怎么解决?
1、以wiபைடு நூலகம்dows验证模式进入数据库管理器。
2、右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码(改成个好记的)。把强制实施密码策略去掉。 3、点击状态选项卡:勾选授予和启用。然后确定

sqlserver数据库死锁解决方法

sqlserver数据库死锁解决方法

sqlserver数据库死锁解决方法
SQL Server 数据库死锁是一个常见的问题,尤其是在高并发的环境下。

当两个或多个事务同时请求对另一个事务占用的资源进行操作时,就会发生死锁。

这将导致数据库操作无法继续,直到手动解锁或超时。

以下是解决 SQL Server 数据库死锁的几种方法:
1. 优化查询语句
查询语句的优化可以减少锁的竞争,从而减少死锁的发生。

可以通过使用索引、缩小查询范围、减少表连接等方式来优化查询语句。

2. 降低事务并发度
降低事务并发度可以减少锁的竞争,从而减少死锁的发生。

可以通过修改并发度、控制并发请求等方式来降低事务并发度。

3. 设置合理的隔离级别
设置合理的隔离级别可以避免一些死锁的发生。

在高并发的环境下,建议使用 READ COMMITTED 隔离级别。

4. 使用锁超时设置
使用锁超时设置可以避免死锁一直持续,从而减少对数据库的影响。

可以使用 SET LOCK_TIMEOUT 命令来设置锁超时时间。

5. 使用锁监控工具
使用锁监控工具可以及时发现死锁的发生,从而采取相应的措施。

可以使用 SQL Server Profiler 或第三方工具来监控锁的竞争情况。

总之,要想避免 SQL Server 数据库死锁,需要从多个方面入手,包括优化查询语句、降低事务并发度、设置合理的隔离级别、使用锁超时设置以及使用锁监控工具等。

sqlserver数据库死锁解决方法

sqlserver数据库死锁解决方法

sqlserver数据库死锁解决方法
在使用sqlserver数据库时,可能会遇到死锁的问题,这种情况通常发生在多个并发用户同时访问同一个资源时,其中一个用户的操作被阻塞,导致其他用户也无法继续执行。

下面是几种解决sqlserver数据库死锁的方法:
1. 数据库设计优化
在设计数据库时应该考虑到并发访问的情况,尽量避免多个用户同时对同一个资源进行修改,可以通过合理的表设计和索引设计来提高并发性能。

2. 事务控制
对于频繁发生死锁的操作,可以将其放在一个事务中,并使用合理的事务隔离级别来控制并发读写,例如使用“读已提交”或“可重复读”级别,避免使用“串行化”级别。

3. 优化查询语句
优化查询语句可以减少死锁的发生,例如使用合理的索引和查询语句,
避免使用过多的子查询和连接操作,以及避免使用不必要的锁。

4. 限制并发访问
可以通过设置时间限制、并发数量限制等方式来限制并发访问,减少死锁的发生。

5. 监控和诊断
对于频繁发生死锁的情况,可以使用sqlserver的性能监视器和诊断工具来进行监控和诊断,找出问题的原因并进行调整。

总结:
死锁是一种常见的数据库并发性能问题,要解决这个问题,需要综合考虑数据库设计优化、事务控制、查询语句优化、并发访问限制和监控诊断等多方面的因素。

通过合理的调整和优化,可以提高数据库的并发性能,避免死锁的发生。

SQLSERVER数据库面试题

SQLSERVER数据库面试题

SQLSERVER数据库⾯试题1.⽤⼀条SQL语句查询出每门课都⼤于80分的学⽣姓名name kecheng fenshu张三语⽂ 81张三数学 75李四语⽂ 76李四数学 90王五语⽂ 81王五数学 100王五英语 90A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)2.学⽣表如下:⾃动编号学号姓名课程编号课程名称分数1 2005001 张三 0001 数学 692 2005002 李四 0001 数学 893 2005001 张三 0001 数学 69删除除了⾃动编号不同,其他都相同的学⽣冗余信息A: delete tablename where ⾃动编号 not in(select min(⾃动编号) from tablename group by 学号,姓名,课程编号,课程名称,分数)⼀个叫department的表,⾥⾯只有⼀个字段name,⼀共有4条纪录,分别是a,b,c,d,对应四个球对,现在四个球对进⾏⽐赛,⽤⼀条sql语句显⽰所有可能的⽐赛组合.你先按你⾃⼰的想法做⼀下,看结果有我的这个简单吗?答:select , from team a, team bwhere < 请⽤SQL语句实现:从TestDB数据表中查询出所有⽉份的发⽣额都⽐101科⽬相应⽉份的发⽣额⾼的科⽬。

请注意:TestDB中有很多科⽬,都有1-12⽉份的发⽣额。

AccID:科⽬代码,Occmonth:发⽣额⽉份,DebitOccur:发⽣额。

数据库名:JcyAudit,数据集:Select * from TestDB答:select a.*from TestDB a,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur************************************************************************************⾯试题:怎么把这样⼀个表⼉year month amount1991 1 1.11991 2 1.21991 3 1.31991 4 1.41992 1 2.11992 2 2.21992 3 2.31992 4 2.4查成这样⼀个结果year m1 m2 m3 m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4答案⼀、select year,(select amount from aaa m where month=1 and m.year=aaa.year) as m1,(select amount from aaa m where month=2 and m.year=aaa.year) as m2,(select amount from aaa m where month=3 and m.year=aaa.year) as m3,(select amount from aaa m where month=4 and m.year=aaa.year) as m4from aaa group by year这个是ORACLE 中做的:select * from (select name, year b1, lead(year) over(partition by name order by year) b2, lead(m,2) over(partition by name order by year) b3,rank()over( partition by name order by year) rk from t) where rk=1;************************************************************************************精妙的SQL语句!精妙SQL语句作者:不详发⽂时间:2003.05.29 10:55:05说明:复制表(只复制结构,源表名:a 新表名:b)SQL: select * into b from a where 1<>1说明:拷贝表(拷贝数据,源表名:a ⽬标表名:b)SQL: insert into b(a, b, c) select d,e,f from b;说明:显⽰⽂章、提交⼈和最后回复时间SQL: select a.title,ername,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b说明:外连接查询(表名1:a 表名2:b)SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c说明:⽇程安排提前五分钟提醒SQL: select * from ⽇程安排 where datediff('minute',f开始时间,getdate())>5说明:两张关联表,删除主表中已经在副表中没有的信息SQL:delete from info where not exists ( select * from infobz where info.infid=infobz.infid )说明:--SQL:SELECT A.NUM, , B.UPD_DATE, B.PREV_UPD_DATEFROM TABLE1,(SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATEFROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHANDFROM TABLE2WHERE TO_CHAR(UPD_DATE,'YYYY/MM') = TO_CHAR(SYSDATE, 'YYYY/MM')) X, (SELECT NUM, UPD_DATE, STOCK_ONHANDFROM TABLE2WHERE TO_CHAR(UPD_DATE,'YYYY/MM') =TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY/MM') ¦¦ '/01','YYYY/MM/DD') - 1, 'YYYY/MM') ) Y, WHERE X.NUM = Y.NUM (+)AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND ) BWHERE A.NUM = B.NUM说明:--SQL:select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名称='"&strdepartmentname&"' and 专业名称='"&strprofessionname&"' order by 性别,⽣源地,⾼考总成绩说明:从数据库中去⼀年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)SQL:SELECT erper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy') AS telyear,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '01', a.factration)) AS JAN,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '02', a.factration)) AS FRI,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '03', a.factration)) AS MAR,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '04', a.factration)) AS APR,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '05', a.factration)) AS MAY,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '06', a.factration)) AS JUE,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '07', a.factration)) AS JUL,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '08', a.factration)) AS AGU,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '09', a.factration)) AS SEP,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '10', a.factration)) AS OCT,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '11', a.factration)) AS NOV,SUM(decode(TO_CHAR(a.telfeedate, 'mm'), '12', a.factration)) AS DECFROM (SELECT erper, a.tel, a.standfee, b.telfeedate, b.factrationFROM TELFEESTAND a, TELFEE bWHERE a.tel = b.telfax) aGROUP BY erper, a.tel, a.standfee, TO_CHAR(a.telfeedate, 'yyyy')说明:四表联查问题:SQL: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....说明:得到表中最⼩的未使⽤的ID号SQL:SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleIDFROM HandleWHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)*******************************************************************************有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value换为A中对应的value这道题的SQL语句怎么写?update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);***************************************************************************⾼级sql⾯试题原表:courseid coursename score-------------------------------------1 java 702 oracle 903 xml 404 jsp 305 servlet 80-------------------------------------为了便于阅读,查询此表后的结果显式如下(及格分数为60):courseid coursename score mark---------------------------------------------------1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass---------------------------------------------------写出此查询语句没有装ORACLE,没试过select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course完全正确SQL> desc course_vName Null? Type----------------------------------------- -------- ----------------------------COURSEID NUMBERCOURSENAME VARCHAR2(10)SCORE NUMBERSQL> select * from course_v;COURSEID COURSENAME SCORE---------- ---------- ----------1 java 702 oracle 903 xml 404 jsp 305 servlet 80SQL> select courseid, coursename ,score ,decode(sign(score-60),-1,'fail','pass') as mark from course_v; COURSEID COURSENAME SCORE MARK---------- ---------- ---------- ----1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass*******************************************************************************原表:id proid proname1 1 M1 2 F2 1 N2 2 G3 1 B3 2 A查询后的表:id pro1 pro21 M F2 N G3 B A写出查询语句解决⽅案sql求解表a列 a1 a2记录 1 a1 b2 x2 y2 z⽤select能选成以下结果吗?1 ab2 xyz使⽤pl/sql代码实现,但要求你组合后的长度不能超出oracle varchar2长度的限制。

SQLServer数据库兼容性问题

SQLServer数据库兼容性问题

SQLServer数据库兼容性问题2020/9/11SQLServer数据库兼容性问题 - Powered by MinDocSQLServer数据库兼容性问题SQLServer 2012⾼版本数据库中 NOLOCK加表别名,写法⽀持如下两种:SQLServer 2005低版本数据库中 NOLOCK 加表别名,写法如下:SQLServer 2012⾼版本数据库,批量插⼊⽀持如下写法:SQLServer 2005低版本数据库中, 批量插⼊写法需要改为1. NOLOCK 别名问题1.1 ⾼版本写法SELECT s.* FROM SKU (NOLOCK) s WHERE s.SKU = '10000075'SELECT s.* FROM SKU s (NOLOCK) WHERE s.SKU = '10000075'1.2 低版本写法SELECT s.* FROM SKU s (NOLOCK) WHERE s.SKU = '10000075'2. 批量插⼊问题2.1 ⾼版本写法INSERT INTO SKU (SKU, sDesc)values ('10000075', '徽章'),('10000076', '徽章2');2.2 低版本写法INSERT INTO SKU (SKU, sDesc)values ('10000075', '徽章');INSERT INTO SKU (SKU, sDesc)values ('10000076', '徽章2');3. 字符串拼接函数Concat3.1 ⾼版本写法2020/9/11SQLServer数据库兼容性问题 - Powered by MinDocSQLServer 2012⾼版本数据库,字符串拼接⽀持函数concat,如下写法:SQLServer 2005低版本数据库中,字符串拼接直接使⽤ ‘+’ 代替concat函数,写法需要改为:SQLServer 2012⾼版本数据库,字符串拼接⽀持函数is NULL,如下写法:SQLServer 2005低版本数据库中,字符串拼接直接使⽤ ISNULL 代替,写法需要改为:SQLServer 2012⾼版本数据库,字符串拼接⽀持函数IFF,如下写法:SELECT concat(SKU,DESC) FROM SKU3.2 低版本写法SELECT SKU+DESC FROM SKU4. iS NULL 函数判断4.1 ⾼版本写法SELECT SKU,DESC FROM SKU WHERE DESC is NULL4.2 低版本写法SELECT SKU,DESC FROM SKU WHERE DESC ISNULL(DESC,'')= ''5. IIF 函数判断5.1 ⾼版本写法SELECT SKU, DESC, IIF(ISNULL(updatedTime, '') = '', GETDATE(), updatedTime) FROM SKU5.2 低版本写法SELECT SKU, DESC,case when ISNULL(updatedTime, '') = '' then GETDATE() else updatedTime end FROM SKU6. 中⽂空格问题2020/9/11SQLServer数据库兼容性问题 - Powered by MinDocSQLServer 2012⾼版本数据库中如果SQL中含有中⽂空格会忽略,但是在SQLServer 2005低版本数据库中, 会抛出语法错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
DROP PROCEDURE sp_hexadecimal
GO
CREATE PROCEDURE sp_hexadecimal
@binvalue varbinary(256),
@hexvalue varchar(256) OUTPUT
AS
DECLARE @charvalue varchar(256)
IF (@xstatus & 2048) = 2048
SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'
ELSE
SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'
先选择其他数据库,然后打开查询分析器,执行该还原操作
3.逻辑文件'userDB_data'不是数据库'userDB'的一部分。请使用RESTORE FILELISTONLY来列出逻辑文件名。
在备份文件中逻辑文件名不叫userDB_data,用“restore filelistonly from disk='**.bak'”找到该备份文件中的逻辑文件名
DECLARE @tmpstr varchar (256)
DECLARE @SID_varbinary varbinary(85)
DECLARE @SID_string varchar(256)
IF (@login_name IS NULL)
DECLARE login_curs CURSOR FOR
PRINT @tmpstr
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
+ ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '
6.用作业生成的脚本创建SQL作业报错:无法将NULL值插入列 'owner_sid',表'msdb.dbo.sysjobs';该列不允许空值。INSERT失败。
将@owner_login_name=N'******'中的引号里面改为对应数据库的所有者
7.执行备份数据库操作时发现有用户在使用而无法执行,分离数据库时候在最后一步不按确定可以将用户踢出且不用执行分离操作
BEGIN
PRINT 'No login(s) found.'
CLOSE login_curs
DEALLOCATE login_curs
RETURN -1
END
SET @tmpstr = '/* sp_help_revlogin script '
PRINT @tmpstr
END
ELSE BEGIN -- NT login has access
SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''
PRINT @tmpstr
END
IF (@xstatus & 1) = 1
BEGIN -- NT login is denied access
SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''
PRINT @tmpstr
SELECT @firstint = FLOOR(@tempint/16)
SELECT @secondint = @tempint - (@firstint*16)
SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO
----- End Script -----
EXEC master..sp_help_revlogin
5.删除登录名时候提示该登录名拥有某数据库
用sp_changedbowner改成其他登录名后再删除
WHERE srvid IS NULL AND name = @login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
IF (@@fetch_status = -1)
GO
CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
DECLARE @name sysname
DECLARE @xstatus int
DECLARE @binpwd varbinary (256)
DECLARE @txtpwd sysname
END
ELSE BEGIN
-- Null password
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
+ ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '
END
IF (@xstatus & 2048) = 2048
-- login upgraded from 6.5
SET @tmpstr = @tmpstr + '''skip_encryption_old'''
BEGIN
IF (@@fetch_status <> -2)
BEGIN
PRINT ''
SET @tmpstr = '-- Login: ' + @name
PRINT @tmpstr
IF (@xstatus & 4) = 4
BEGIN -- NT authenticated account/group
SET @tmpstr = '** Generated '
+ CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
PRINT @tmpstr
PRINT ''
PRINT 'DECLARE @pwd sysname'
WHILE (@@fetch_status <@tmpstr + '''skip_encryption'''
PRINT @tmpstr
END
END
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
1.创建新的数据库步骤:
1)创建数据库,确定定数据,日志或索引路径
2)增加登录名,设置默认数据库
3)增加用户名并关联登录名
4)更改DB Owner
5)将DB Owner角色增加该用户
2.查询分析器执行还原时报错:因为数据库正在使用,所以未能获得对数据库的排它访问权。
4.数据库还原后用户名和登录名失去关联
用sp_change_users_login重新关联,若重新还原后仍存在这个问题,则需用脚本导出原数据库的登录信息再此数据库上创建登录
脚本如下:USE master
GO
IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
SELECT sid, name, xstatus, password FROM master..sysxlogins
WHERE srvid IS NULL AND name <> 'sa'
ELSE
DECLARE login_curs CURSOR FOR
相关文档
最新文档