我正在重写。NET应用程序,该应用程序利用Oracle查询,并将它们更改为SQL Server查询。我正在重写的一个查询如下:
INSERT INTO MY_TABLE (ID, NAME, DESCRIPTION) VALUES (3, q'§Testing some" test' data'"' §', q'§More'"'test data"'''"§')
我的猜测是,使用引号运算符的目的是防止SQL注入,因为这个查询中的值实际上来自客户端。然而,在SQL Server中查找某些内容时,我找不到任何能很好地完成任务的内容。
我确实在这里找到了这篇文章:https://chartio.com/learn/sql-tips/single-double-quote-and-backticks-in-mysql-queries/.然而,对于单引号和双引号,本文中唯一的解决方案似乎是使用反斜杠。在网上寻找其他解决方案时,我得到了同样的答案。
在SQL Server中,我是否可以设置类似的查询,而不必修改插入的值的内容(即放入反斜杠(?
简短的回答是否。
解决方法是使用参数化输入,或使用双单引号''
手动转义引号。如果您有现有的脚本来转换,可以使用一个简单的regex来清理它们。在SQL中,恢复SQL将类似于以下内容:
INSERT INTO MY_TABLE (ID, NAME, DESCRIPTION) VALUES (3, 'Testing some" test'' data''"'' ', 'More''"''test data"''''''"')
这将导致以下输出:
ID | 名称 | 描述 |
---|---|---|
3 | 测试一些";测试"数据"> | 更多"测试数据""> |