SQL丢失了INSERT语句的转义字符

时间:2012-08-23 12:29:48

标签: regex sql-server-2005 escaping quoting

  • 我使用的是Microsoft SQL 2005
  • “有人”给了我一个INSERT“预定义语句”列表,我无法在SQL外修改(例如使用像Python这样的脚本语言)。
  • 作为“某人”,我在尝试转义引用字符时遇到类型NVARCHAR字段的问题。

比如说我需要运行以下SQL语句:

INSERT INTO TableX VALUES('John Doe's value') -- This is not working because of single quotes...

我需要找到一种方法来转换该字符串以插入(John Doe's value),而无需使用SQL语句之外的方法。

我无意中尝试了类似以下语句的内容,将单引号与REPLACE函数连接起来,并引用了另一条引号:

INSERT INTO TableX VALUES('' + REPLACE('John Doe's value'), ''', '''' + '')

或者

INSERT INTO TableX VALUES('''''' + REPLACE(''''''John Doe's value'''''''), '''''', '''''''' + '''''')

为了处理逃避字符,但它无法正常工作。

我更喜欢使用函数或简单的东西,而不是使用存储过程或更复杂的解决方案。

1 个答案:

答案 0 :(得分:1)

如果您在SQL Server中接受,我强烈建议您停止接受INSERT语句并提供具有明确定义的参数和数据类型的存储过程。否则,您将容易受到注入攻击(我同意您的API的内部客户端不会这样做,但您的API将是易受攻击的,就是这样!)。

BTW,功能和存储过程都与本案中涉及的复杂性相似。