1. --如何支持动态拼接SQL的参数化查询  
  2. --本demo主要演示,如何在拼接SQL语句的情况下参数化查询  
  3. --建立测试表  
  4. create table oswica_test_table_1  
  5. (  
  6.     id int,  
  7.     name varchar(50),  
  8.     remark varchar(100)  
  9. )  
  10. go  
  11. --写入部分测试数据  
  12. insert into oswica_test_table_1 select 1,'oswica','' 
  13. insert into oswica_test_table_1 select 2,'stone','' 
  14. insert into oswica_test_table_1 select 3,'nana','' 
  15. insert into oswica_test_table_1 select 4,'nana','' 
  16. go  
  17. --建立存储过程  
  18. create proc oswica_proc_querytestdata  
  19. (  
  20.     @whereSql nvarchar(max),  
  21.     @paramNameList nvarchar(max),  
  22.     @paramValueList nvarchar(max)  
  23. )  
  24. as 
  25. begin 
  26.     declare @exesql nvarchar(max)  
  27.     --生成查询语句  
  28.     set @exesql='EXEC sp_executesql N''select * from oswica_test_table_1 '+@whereSql+''',N'''+@paramNameList+''','+@paramValueList+'' 
  29.     print @exesql  
  30.     exec(@exesql)  
  31. end 
  32. go  
  33. --执行存储过程  
  34. exec oswica_proc_querytestdata N'where id=@id and name=@name',N'@id int,@name varchar(50)',N'@id=1,@name=''oswica''' 
  35. go  
  36. --结果  
  37. --EXEC sp_executesql N'select * from oswica_test_table_1 where id=@id and name=@name',N'@id int,@name varchar(50)',@id=1,@name='oswica'  
  38. --id          name                                               remark  
  39. ----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------  
  40. --1           oswica     
  41. --说明  
  42. --实际上我们不推荐直接在存储过程中这么使用。因为这里还是存在执行代码里面有拼接sql的情况。  
  43. --最好的办法是在程序代码里面动态拼接好然后使用参数方式动态的根据实际参数个数传入参数,已  
  44. --实现即能够兼容参数化查询又能够拼接字符串。  
  45. --  
  46. --建议  
  47. --按照上面的说法,我们可以拼接如下sql:  
  48. --select * from oswica_test_table_1 where id=@id and name=@name  
  49. --然后按照拼接的参数个数使用SqlCommand 的Parameters 动态的添加2个参数:@id和@name来达到  
  50. --目的。而在编程语言中实现动态添加参数相对比较容易,或者通过实现sql server的 CLR存储过程来  
  51. --达到这一目的。  
  52.