- --如何支持動態拼接SQL的參數化查詢
- --本demo主要演示,如何在拼接SQL語句的情況下參數化查詢
- --建立測試表
- create table oswica_test_table_1
- (
- id int,
- name varchar(50),
- remark varchar(100)
- )
- go
- --寫入部分測試數據
- insert into oswica_test_table_1 select 1,'oswica',''
- insert into oswica_test_table_1 select 2,'stone',''
- insert into oswica_test_table_1 select 3,'nana',''
- insert into oswica_test_table_1 select 4,'nana',''
- go
- --建立存儲過程
- create proc oswica_proc_querytestdata
- (
- @whereSql nvarchar(max),
- @paramNameList nvarchar(max),
- @paramValueList nvarchar(max)
- )
- as
- begin
- declare @exesql nvarchar(max)
- --生成查詢語句
- set @exesql='EXEC sp_executesql N''select * from oswica_test_table_1 '+@whereSql+''',N'''+@paramNameList+''','+@paramValueList+''
- print @exesql
- exec(@exesql)
- end
- go
- --執行存儲過程
- exec oswica_proc_querytestdata N'where id=@id and name=@name',N'@id int,@name varchar(50)',N'@id=1,@name=''oswica'''
- go
- --結果
- --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'
- --id name remark
- ----------- -------------------------------------------------- ----------------------------------------------------------------------------------------------------
- --1 oswica
- --說明
- --實際上我們不推薦直接在存儲過程中這麼使用。因爲這裏還是存在執行代碼裏面有拼接sql的情況。
- --最好的辦法是在程序代碼裏面動態拼接好然後使用參數方式動態的根據實際參數個數傳入參數,已
- --實現即能夠兼容參數化查詢又能夠拼接字符串。
- --
- --建議
- --按照上面的說法,我們可以拼接如下sql:
- --select * from oswica_test_table_1 where id=@id and name=@name
- --然後按照拼接的參數個數使用SqlCommand 的Parameters 動態的添加2個參數:@id和@name來達到
- --目的。而在編程語言中實現動態添加參數相對比較容易,或者通過實現sql server的 CLR存儲過程來
- --達到這一目的。