面试题1:
表table1只有1列ID
insert into Table1
select 1
union
select 2
union
select 3
union
select 4
union
select 5
union
select 6
需要转换为123456789
快速写出有几种写法,我第一感觉是列转换行,仔细一想又更简单的方法:
面试题2:
说出下面sql关键字具体用法,举例说明。
over pivot with Merge output
这里我只给关键字Merge用法,它在SQL Server 2008被引入
http://www.cnblogs.com/lenxu/archive/2012/02/14/2350922.html
面试题3是关于C#和sql的:
C#中注入攻击,拼接字符串为什么可以注入攻击?而输入sql关键字可以注入工具,普通A,B字段不行,举例说明?SqlParameter和拼接sql语句,哪种更安全,不都是最终给存储过程执行了,说出他们的原理所在
第一题:使用FOR XML 进行连接
CREATE TABLE #Table1 ( id INT ) INSERT INTO #Table1 SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 SELECT '' + id + '' FROM #Table1 FOR XML PATH('') DROP TABLE #table1
第二题:请参考MSDN的例子,比如pivot:
http://msdn.microsoft.com/zh-cn/library/ms177410%28v=SQL.90%29.aspx
关注第三个问题
第三个肯定是参数更安全了,如类型检测,能保证输入的东西只能当参数使用,如注入的恶意脚本只会被解析成字符串的值,等等吧。
第三个问题 例如 用户输入的 "1 ' or 1=1 --"
你的语句这样的 sql="delete from table where id='"+id+" ' ";把用户输入的数据填到里面
结果是sql="delete from table where id='1 ' or 1=1 -- ' ";
这导致的结果就是 你的表里所有数据都删掉了 求改也一样 查询就都会查出来 你可以试试 这就是注入攻击