在日常需求中经常会有行转列的事情需求处理,如果不是动态的行,那么我们可以采取case when 罗列处理。
在sql 2005以前处理动态行或列的时候,通常采用拼接字符串的方法处理,在2005以后新增了pivot函数之后,我可以利用这样函数来处理。
1.动态SQL注入式判断函数
--既然是用到了动态SQL,就有一个老话题:SQL注入。建一个注入性字符的判断函数。
CREATE FUNCTION [dbo].[fn_CheckSQLInjection]
(
@Col nvarchar(4000)
)
RETURNS BIT --如果存在可能的注入字符返回true,反之返回false
AS
BEGIN
DECLARE @result bit;
IF
UPPER(@Col) LIKE UPPER(N'%0x%')
OR UPPER(@Col) LIKE UPPER(N'%;%')
OR UPPER(@Col) LIKE UPPER(N'%''%')
OR UPPER(@Col) LIKE UPPER(N'%--%')
OR UPPER(@Col) LIKE UPPER(N'%/*%*/%')
OR UPPER(@Col) LIKE UPPER(N'%EXEC%')
OR UPPER(@Col) LIKE UPPER(N'%xp_%')
OR UPPER(@Col) LIKE UPPER(N'%sp_%')