版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2025年SQLserver数据库编程考试题库及答案一、单项选择题(每题2分,共20分)1.以下关于T-SQL变量声明的语法,正确的是()A.VAR@UserNameVARCHAR(50)B.DECLAREUserNameVARCHAR(50)C.DECLARE@UserNameVARCHAR(50)D.SET@UserName='张三'答案:C2.在SQLServer中,若要查询2024年1月1日之后创建的订单,且订单状态为“已支付”,正确的WHERE子句是()A.WHEREOrderDate>'2024-01-01'ANDStatus='已支付'B.WHEREOrderDate>='2024-01-01'ORStatus='已支付'C.WHEREOrderDateBETWEEN'2024-01-01'AND'2024-12-31'ORStatus='已支付'D.WHEREOrderDateIN('2024-01-01')ANDStatus='已支付'答案:A3.执行以下语句后,变量@Result的值是()DECLARE@Num1INT=10,@Num2INT=3;SET@Result=@Num1%@Num2;A.1B.3C.0D.4答案:A(10除以3的余数为1)4.以下关于存储过程的描述,错误的是()A.存储过程可以包含多个T-SQL语句B.存储过程执行时需要重新编译C.存储过程可以提高代码复用性D.存储过程可以接受输入参数答案:B(存储过程首次执行后会被缓存,后续执行无需重新编译)5.若要为表Employees的Name列创建非聚集索引,正确的语句是()A.CREATEINDEXIX_Employees_NameONEmployees(Name)B.CREATECLUSTEREDINDEXIX_Employees_NameONEmployees(Name)C.ALTERTABLEEmployeesADDINDEXIX_Employees_Name(Name)D.CREATENONCLUSTEREDINDEXONEmployees(Name)答案:A(默认是非聚集索引,无需显式声明NONCLUSTERED)6.触发器中,用于存储被删除行旧数据的虚拟表是()A.INSERTEDB.DELETEDC.UPDATEDD.OLDTABLE答案:B7.事务的ACID特性中,“原子性”指的是()A.事务执行后数据保持一致性状态B.事务中的操作要么全部完成,要么全部不完成C.多个事务并发执行时互不干扰D.事务一旦提交,更改永久保存答案:B8.以下关于游标(Cursor)的描述,正确的是()A.游标只能用于读取数据,不能修改B.游标处理数据时不需要逐行操作C.游标可以在存储过程中使用D.游标是一种物理表结构答案:C9.在SQLServer中,使用OPENJSON函数解析JSON数据时,若要将JSON数组转换为行集,需要配合()A.WITH子句B.CROSSAPPLYC.FORJSOND.PATH答案:B(通常与CROSSAPPLY或OUTERAPPLY配合使用)10.若要授予用户User1对表Orders的SELECT和UPDATE权限,正确的语句是()A.GRANTSELECT,UPDATEONOrdersTOUser1B.GRANTPERMISSIONS(SELECT,UPDATE)ONOrdersTOUser1C.GRANTALLONOrdersTOUser1D.GRANTSELECTANDUPDATEONOrdersTOUser1答案:A二、填空题(每空2分,共20分)1.在T-SQL中,使用______关键字声明局部变量,变量名以______开头。答案:DECLARE,@2.事务的提交语句是______,回滚语句是______。答案:COMMITTRANSACTION,ROLLBACKTRANSACTION3.触发器分为DML触发器和______触发器,其中DML触发器又包括INSERT、______和DELETE类型。答案:DDL,UPDATE4.聚集索引决定了表中数据的______顺序,一个表最多可以创建______个聚集索引。答案:物理存储,15.使用______函数可以将字符串转换为小写,使用______函数可以获取当前系统时间。答案:LOWER,GETDATE()6.在JSON数据处理中,FORJSONPATH子句会根据______自动提供嵌套的JSON结构。答案:列的层次关系(或表结构)三、简答题(每题8分,共32分)1.简述存储过程与用户定义函数的主要区别。答案:(1)返回值:存储过程可以通过输出参数返回多个值或无返回值,函数必须返回单个值(标量函数)或表(表值函数);(2)使用场景:存储过程常用于执行复杂业务逻辑(如事务处理),函数更适合作为表达式的一部分参与计算;(3)调用方式:存储过程使用EXEC执行,函数可以在SELECT、WHERE等子句中直接调用;(4)事务支持:存储过程内部可以使用事务控制语句(如BEGINTRANSACTION),函数内部不允许。2.说明索引优化的基本原则(至少列出4点)。答案:(1)优先在WHERE子句、JOIN条件、ORDERBY和GROUPBY涉及的列上创建索引;(2)避免在小基数列(如性别列,仅“男/女”)上创建索引,否则索引效率可能低于全表扫描;(3)限制索引数量,过多索引会增加插入、更新、删除的开销;(4)对频繁更新的表,谨慎使用聚集索引(因会改变数据物理存储顺序);(5)使用覆盖索引(包含查询所需的所有列),避免回表操作。3.简述触发器的执行流程(以INSERT触发器为例)。答案:(1)当向表中插入新行时,触发INSERT类型的触发器;(2)新插入的行被复制到INSERTED虚拟表中(存储新数据);(3)触发器执行内部定义的T-SQL逻辑(如验证数据合法性、更新关联表);(4)若触发器执行过程中出现错误(如CHECK约束失败),则整个插入操作被回滚;(5)若触发器成功执行,插入操作提交,数据永久保存到表中。4.说明事务隔离级别“可重复读(REPEATABLEREAD)”与“读已提交(READCOMMITTED)”的区别。答案:(1)读已提交:确保事务只能读取其他事务已提交的数据,避免脏读(读取未提交的中间数据);但同一事务中多次读取同一行可能得到不同值(不可重复读);(2)可重复读:在事务执行期间,禁止其他事务对当前事务已读取的数据进行修改(通过共享锁),确保同一事务内多次读取同一行结果一致;但无法阻止幻读(其他事务插入新行导致结果集变化)。四、编程题(共28分)1.(8分)创建电商订单表Orders,要求包含以下字段及约束:OrderID(订单号,主键,自增整数)UserID(用户ID,非空,INT类型)OrderDate(下单时间,默认值为当前系统时间)TotalAmount(总金额,DECIMAL(10,2),必须大于0)Status(状态,VARCHAR(20),只能是'未支付'、'已支付'、'已发货')答案:CREATETABLEOrders(OrderIDINTIDENTITY(1,1)PRIMARYKEY,UserIDINTNOTNULL,OrderDateDATETIMEDEFAULTGETDATE(),TotalAmountDECIMAL(10,2)CHECK(TotalAmount>0),StatusVARCHAR(20)CHECK(StatusIN('未支付','已支付','已发货')));2.(10分)编写存储过程usp_UpdateOrderStatus,实现以下功能:输入参数:@OrderIDINT(订单号),@NewStatusVARCHAR(20)(新状态)逻辑要求:①检查订单是否存在,若不存在则抛出错误“订单不存在”;②检查新状态是否在允许的范围内('未支付'、'已支付'、'已发货'),否则抛出错误“状态无效”;③更新订单状态,并返回“状态更新成功”的消息。答案:CREATEPROCEDUREusp_UpdateOrderStatus@OrderIDINT,@NewStatusVARCHAR(20)ASBEGINSETNOCOUNTON;检查状态有效性IF@NewStatusNOTIN('未支付','已支付','已发货')BEGINRAISERROR('状态无效',16,1);RETURN;END检查订单是否存在IFNOTEXISTS(SELECT1FROMOrdersWHEREOrderID=@OrderID)BEGINRAISERROR('订单不存在',16,1);RETURN;END更新状态UPDATEOrdersSETStatus=@NewStatusWHEREOrderID=@OrderID;PRINT'状态更新成功';END;3.(10分)编写触发器trg_OrderDelete,当删除Orders表中的订单时,自动将对应订单的日志记录插入到OrderLog表(结构:LogIDINTIDENTITY,OrderIDINT,DeleteTimeDATETIME,OperatorVARCHAR(50))中,操作人(Operator)取当前系统用户(使用SYSTEM_USER函数)。答案:CREATETRIGGERtrg_OrderDeleteONOrdersAFTERDELETEASBEGININSERTINTOOrderLog(OrderID,DeleteTime,Operator)SELECTd.OrderID,GETDATE(),SYSTEM_USERFROMDELETEDd;END;4.(附加题,可选)编写事务处理逻辑,实现“用户下单时扣减库存”的业务:表结构:Products(ProductIDINT主键,ProductNameVARCHAR(50),StockINT)OrderDetails(DetailIDINT主键,OrderIDINT,ProductIDINT,QuantityINT)逻辑要求:①开启事务;②检查商品库存是否足够(Quantity≤Stock);③若足够,扣减库存(Stock=StockQuantity),并插入订单明细;④若不足,回滚事务并提示“库存不足”;⑤无论是否成功,最终关闭事务。答案:DECLARE@OrderIDINT=1001;-假设订单号DECLARE@ProductIDINT=2001;-商品IDDECLARE@QuantityINT=5;-购买数量BEGINTRANSACTION;BEGINTRY检查库存IF(SELECTStockFROMProductsWHEREProductID=@ProductID)<@QuantityBEGINRAISERROR('库存不足',16,1);ROLLBACKTRANSACTION;RETURN;END扣减库存UPDATEProductsSETStock=Stock@Quanti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年邯郸市邯山区医院医护人员招聘笔试题库及答案详解
- 2025年北票市第二人民医院医护人员招聘笔试题库及答案详解
- 2025年邯郸市中西医结合医院医护人员招聘笔试试题及答案详解
- 2025年崇明县中心医院医护人员招聘笔试题库及答案详解
- 2025年盘锦市馥安医院医护人员招聘笔试题库及答案详解
- 2026湖南工程学院专任教师公开招聘13人考试参考题库及答案详解
- 2025年上海市市北医院医护人员招聘笔试题库及答案详解
- 2025年朝阳县第三人民医院医护人员招聘笔试题库及答案详解
- 2026年江西桑海企业集团职工医院医护人员招聘考试模拟试题及答案详解
- 2025年饶阳县博陵医院医护人员招聘笔试题库及答案详解
- 2026年山东科技大学综合评价综合素质考核笔试+面试模拟试题及参考答案
- 2026年金属非金属矿山(地下矿山)安全管理人员证考试题库(含答案)
- 2026年高考历史北京卷考试试卷及答案
- 电力系统运行与调度操作规范指南
- 2026年中国兵器工业集团招聘考试综合知识题库
- 2025年山东日照市初二地理生物会考真题试卷(含答案)
- 幼儿园幼儿申诉工作制度
- 北京工业职业技术学院《旅游接待业》2025-2026学年期末试卷
- 2026年四川省历年信息技术学业水平题库试题【必考】附答案详解
- 人教版三年级数学下册《周长》教学设计(表格式)
- 2025年医疗器械质量检验规范
评论
0/150
提交评论