我正在使用 asp.net 开发网站。
我有一种情况,我需要根据使用 SQL 的界面中的复选框驱动的几种过滤机制来查询表。所以过滤器可能有几种组合。所以最后我发现这可以通过使用动态 sql 查询来实现。所以我写了一个存储过程,然后在生成正确的查询后将查询从应用程序传递给存储过程。
我的示例存储过程将是这样的
CREATE PROCEDURE usp_dynamic(IN query_one VARCHAR(500))
BEGIN
SET @s = CONCAT('SELECT col1,col2 FROM test_table where',query_one );
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
所以我有几个问题
1)这安全吗?我的意思是它会导致sql注入吗?
2)存储过程总是编译为最佳查询计划。那么动态查询会导致每次得到查询时重新编译SP,对吗?
3) 是否有任何性能问题?
4)当我使用这种方法时,我还需要注意其他任何事实吗?
5)如果有任何问题可以采取什么措施来减少这些事情?