学习数据库的 Dynamic SQL(动态 SQL),核心思路是:先懂“为什么用”,再学“怎么拼”,最后练“安全写法”。下面按 概念 → 各数据库写法 → 学习路径 → 常见坑 给你一个清晰路线。
静态 SQL:SQL 在写代码时就固定了
SELECT * FROM user WHERE id = 1;
动态 SQL:SQL 在运行时才拼出来
'SELECT * FROM ' + table_name + ' WHERE id = ' + id;
常见使用场景
方式一:PreparedStatement(应用层拼)
String sql = "SELECT * FROM " + table + " WHERE id = ?";
方式二:存储过程里用 PREPARE
SET @sql = CONCAT('SELECT * FROM ', table_name);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
方式一:EXECUTE IMMEDIATE
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || table_name INTO cnt;
方式二:DBMS_SQL(更复杂、更灵活)
DBMS_SQL.PARSE(cursor, sql_text, DBMS_SQL.NATIVE);
方式一:EXEC
EXEC('SELECT * FROM ' + @table)
方式二:sp_executesql(推荐,支持参数)
EXEC sp_executesql
N'SELECT * FROM user WHERE id = @id',
N'@id int',
@id = 1;
EXECUTE 'SELECT * FROM ' || tab_name;
或在 PL/pgSQL 中:
EXECUTE format('SELECT * FROM %I WHERE id = $1', tab_name) USING id;
EXECUTE IMMEDIATE / sp_executesql'SELECT * FROM ' + user_input
如果你告诉我:
我可以直接给你针对性示例和练习。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。