如何支持動態拼接SQL的參數化查詢

 

  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.  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章