SSIS OLE DB命令中单引号的转义字符及表达式写法咨询
如何生成带单引号的正确SQL参数化查询
你之前写的UPDATE TABLE SET COLUMN1 = ? WHERE COLUMN2 = \'?\';有问题——不该给参数占位符?加单引号(不管转义与否),这会让数据库把?当成字符串字面量,而不是参数占位符,自然无法正确替换参数。
下面给你正确的解决方法:
优先用参数化查询,别手动转义
手动转义单引号不仅容易写错,还会埋下SQL注入的隐患。现在几乎所有编程语言和数据库驱动都支持参数化查询,能自动处理单引号这类特殊字符的转义,省心又安全。不同场景的实现示例
举几个常见的例子:Python + SQLite3
import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() # 写参数化语句,占位符?不用加引号 update_sql = "UPDATE TABLE SET COLUMN1 = ? WHERE COLUMN2 = ?" # 把参数以元组形式传进去,字符串参数不用手动加单引号 cursor.execute(update_sql, (789, '123456')) conn.commit()执行后会自动生成你要的正确SQL:
UPDATE TABLE SET COLUMN1 = 789 WHERE COLUMN2 = '123456';Java + JDBC
String updateSql = "UPDATE TABLE SET COLUMN1 = ? WHERE COLUMN2 = ?"; PreparedStatement pstmt = connection.prepareStatement(updateSql); pstmt.setInt(1, 789); pstmt.setString(2, "123456"); pstmt.executeUpdate();
万不得已要手动拼接SQL(强烈不推荐)
如果特殊情况必须手动拼字符串,别用反斜杠转义单引号,要把单个单引号换成两个单引号:- 当参数是
123456时,正确写法:UPDATE TABLE SET COLUMN1 = 789 WHERE COLUMN2 = '123456'; - 如果参数本身带单引号(比如
12'34),要写成:UPDATE TABLE SET COLUMN1 = 789 WHERE COLUMN2 = '12''34';
- 当参数是
内容的提问来源于stack exchange,提问作者pedrof
相关产品推荐
相关产品推荐

