Respuestas sobre cómo admitir consultas parametrizadas SQL empalmadas dinámicamente
remarkvarchar(100))go--Escribe algunos datos de prueba insertintooswica_test_table_1select1,
'oswica',''insertintooswica_test_table_1select2,
'stone','' insertintooswica_test_table_1select3 ,
'nana',''insertintooswica_test_table_1select4,
'nana',''go--Crear un procedimiento almacenado createprocoswica_proc_querytestdata(@whereSqlnvarchar(max),
@paramNameListnvarchar(max),
@paramValueListnvarchar(max))asbegindeclare@exesqlnvarchar(max)
--Generar declaración de consulta set@exesql='EXECsp_executesqlN'
'select*fromoswica_test_table_1'
+@whereSql+''
',N'''+@paramNameList+''
','
+@paramValueList+''
print@exesqlexec(@exesql)endgo--ejecuta el procedimiento almacenado execoswica_proc_querytestdataN
'whereid=@idandname=@name',N< / p>
'@idint,@namevarchar(50)',N
'@id=1,@name=''oswica'''go--result
--EXECsp_executesqlN'select*fromoswica_test_table_1whereid=@idandname=@nombre',N'@idint,@namevarchar(50)',@id=1,@nombre='oswica'
--idnameremark
-------------------------------------------- ---- ---------------------------------------------- ---- ---------------------------------------------- ---- ------------------1oswica--Explicación
--De hecho, no recomendamos usarlo directamente en el procedimiento almacenado. Porque todavía hay situaciones en las que SQL está empalmado en el código de ejecución.
--La mejor manera es empalmarlo dinámicamente en el código del programa y luego usar el método de parámetro para pasar dinámicamente los parámetros de acuerdo con el número real de parámetros.
-- La implementación es compatible. Las consultas parametrizadas también pueden concatenar cadenas. ----Sugerencia
--De acuerdo con la declaración anterior, podemos unir el siguiente sql:
--select*fromoswica_test_table_1whereid=@idandname=@name
--Luego use los parámetros de SqlCommand para agregar dinámicamente 2 parámetros de acuerdo con la cantidad de parámetros empalmados: @id y @name para lograr el
-- propósito.
Es relativamente fácil agregar parámetros dinámicamente en un lenguaje de programación o implementar el procedimiento almacenado CLR de SQLServer
para lograr este objetivo.