1 / 13
文档名称:

SQL 面试题及答案.doc

格式:doc   大小:88KB   页数:13页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

SQL 面试题及答案.doc

上传人:wz_198613 2021/9/1 文件大小:88 KB

下载得到文件列表

SQL 面试题及答案.doc

文档介绍

文档介绍:1、SQL SREVER中,向一个表中插入了新数据,如何快捷的 得到自增量字段的当前值
这种情况其实我们经常用到,比如我们新建了一个用户,建 立完用户后我们希望马上得到这个新用户的ID,因为我们一 般都是把这种用户ID的字段设置成自增长类型的,乍看起 来好像没有要得到那个新ID很麻烦,其实sql server内置 了一些全局的变量,使我们很容易就得到那个新的自增字段 的ID,就是使用@***@IDENTITYo
在一条INSERT、SELECT INTO或大容量复制语句完 成后,^IDENTITY中包含语句生成的最后一个标识值。如 果语句未影响任何包含标识列的表,则^IDENTITY返回 NULLo如果插入了多个行,生成了多个标识值,则 @***@IDENTITY将返回最后生成的标识值。如果语句触发了一 个或多个触发器,该触发器又执行了生成标识值的插入操 作,那么,在语句执行后立即调用^IDENTITY将返回触发 器生成的最后一个标识值。
在具体应用中可以这样来写SQL语句: string strSql - "INSERT INTO
[User]([Name], [LoginName], [Pwd], [RegTime], [IsSuper]
,[Remark])〃 +
"VALUES(***@Name, ***@LoginName, ***@Pwd, ***@RegTime, ***@IsSuper, ***@Re mark):select @***@IDENTITY ;〃;
执行的时候直接用command. ExecuteScalar ();就可以了,能 直接返回该条记录的UserID;
解答二:
经过实验,得如下结论:
select DISTINCT @***@IDENTITY as iden from FaWen
解释:上述语句对SQL SERVER的一个会话,也就是一条连 接,返回该连接最后一条插入记录得到的自增字段的值。
假设有3个程序,分别连接SQL SERVER,有三个连接。3个 程序都向同一个表依顺序插入数据,得到的值分别是1、2、 3,那么,只要3个程序对SQL的连接还保持着,第一个程
序使用上述语句,将得到1,而不是3,第二个程序将得到2, 也不是3。第三个程序得到3。
因此,用上述语句可以得到自己刚才插入记录的自增字段的 值,不怕其它程序的并发插入操作。
上述语句中,使用DISTINCT的原因是,虽然返回的值是 当前连接插入操作得到的最大值,但返回的相同值的记录有 多条。条数等于当前多个连接一共插入的记录数。
实验方法:启动三个Query analyzer查询分析器,分别执 行插入操作后再做上述取自增字段值的操作
我利用
rs. addnew
增加一条记录时,如何同时获取自增1字段ID的当前值, 而无须再进行一次查询来获取!因为我立即要用到该ID值, 如果在增加记录完毕后再利用select id 进行一次查 询无疑会使系统受限,有办法吗?
如果你能保证id二行数的话可以用
rs. moveend '当指针在最后一条记录时count是全部行

rs. count
2、什么叫做SQL注入,如何防止?请举例说明
SQL注入就是在正常的SQL执行语句中恶意插入攻击者想要 运行的sql语句,比如,我们有一个方法是这么写的:
public static bool Login(string loginName, string pwd) (
string strSql - string. Format(^select * from [User] where LoginName - ' {0}' and Pwd - ' {1}' 〃,loginName, pwd);
如果我传给loginname的值是’or 1=1--,那么这个sql语 句成了 select * from [User] where LoginName - or 1=1一',这样不管我密码输入什么,肯定都是符合条件的。
当然这只是最简单的情况,如果我把loginname的值改成’ or 1-1: delete from [user]--,那么后果不堪设想,如果我 通过sql来执行net use相关的命令,就可能在服务器上给 自己加一个帐号,这样就逐步可以控制整个数据库所在的服 务器。。。
这就是sql注入的通常方法和可能的损害。
要放置其实也很简单,可以通过至少两个方法来进行:
最根本的,不实用组合sql的方法,而是通过使用命令参 数方式来执行命令,比如我们把sql改成这种方式:
string strSql - "select * from [user] where LoginName -***@LoginName and Pwd -