1.C#调用存储过程,带参数返回的功能,而且是参数化拼接,这样就可以防止sql注入
System.Data.SqlClient.SqlParameter[] parameters = { new System.Data.SqlClient.SqlParameter("@i",100), new System.Data.SqlClient.SqlParameter("@j",100), new System.Data.SqlClient.SqlParameter("@he", System.Data.SqlDbType.Int) }; parameters[2].Direction = System.Data.ParameterDirection.Output; var slt = this.DbContext.Database.SqlQuery<int>("exec pro_Add @i,@j,@he output", parameters); slt.ToList(); int AllCount = Int32.Parse(parameters[2].Value.ToString());
2.存储过程分页的功能实现
create procedure paging_procedure ( @pageIndex int, -- 第几页 @pageSize int -- 每页包含的记录数 ) as begin select top (select @pageSize) * -- 这里注意一下,不能直接把变量放在这里,要用select from (select row_number() over(order by sno) as rownumber,* from student) temp_row where rownumber>(@pageIndex-1)*@pageSize; end -- 到时候直接调用就可以了,执行如下的语句进行调用分页的存储过程 exec paging_procedure @pageIndex=2,@pageSize=10;
3.存储过程中处理,条件中带IN的语句
--例如: SELECT * FROM tb WHERE id IN (1, 2, 3, 4, ........) AND NAME = 'best' --1.将括号的条件做成变量 DECLARE @str VARCHAR(4000) SET @str = '1,2,3,4,5.......' --2.然后将@s拆分后插入临时表 CREATE TABLE #t ( id VARCHAR(10) ) DECLARE @i INT DECLARE @len INT SET @i = 1 WHILE @i < LEN(@str + ',') BEGIN INSERT #t SELECT SUBSTRING(@str + ',', @i, CHARINDEX(',', @str + ',', @i) -@i) SET @i = CHARINDEX(',', @str + ',', @i) + 1 END --3利用临时表和原表进行连接取值 SELECT k.* FROM tb k INNER JOIN #t p ON p.id = k.id WHERE NAME = 'best'