日期:2014-05-17  浏览次数:20489 次

微软面试遇到的sql题目,高手看看有几种写法
面试题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
快速写出有几种写法,我第一感觉是列转换行,仔细一想又更简单的方法:
SQL code

DECLARE @STR VARCHAR(2000)  
select @STR=ISNULL(@STR+'','')+convert(varchar(10),ID) from  (select ID from table1)AS T
select @STR



面试题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语句,哪种更安全,不都是最终给存储过程执行了,说出他们的原理所在?

------解决方案--------------------
第一个问题常见的方式有四种:
参考:
http://blog.csdn.net/maco_wang/article/details/6370666
------解决方案--------------------
第一题,为这种效率会好些。
SELECT REPLACE((SELECT @STR=ISNULL(@STR+'','')+RTRIM(ID) FROM Table1
FOR XML PATH('')),',','')

第二题,百度下就行了。

第三题 SqlParameter 是由C#机制进行防注入检索,这这种机制对于动态SQL的检索并不到位,容易产生关键字注入!