正确的字符串转义为T-SQL字符串文字

Aka*_*ava 7 c# t-sql sql-server

我想使用如下查询,我正在寻找转义字符串的确切信息/链接

BookTitle是NVARCHAR(200)

SELECT*FROM Books WHERE BookTitle IN('Mars and Venus','Stack'的溢出\ r \n')

问题:是否只需要转义"'",甚至还需要转义\ r \n?MySql .Net Provider公开了一个转义字符串值的方法,Sql Server .Net Provider中是否有这样的函数?

我可能需要C#等效转义为字符串值.

我知道参数化命令,但是为了最小化我的服务器到客户端的通信,并且IN子句中的值在20到50之间,在一次调用中为BookTitle的每个值运行SELECT会变得太昂贵.而是运行单个查询并返回所有级联结果有助于节省网络资源.

Luk*_*keH 5

SQL Server无法识别\r\n序列,无论是否已转义.

如果你想匹配\r\nin,你需要做这样的事情BookTitle:

-- \r = CHAR(13)
-- \n = CHAR(10)
SELECT *
FROM Books
WHERE BookTitle IN ('Mars and Venus', 'Stack''s Overflow ' + CHAR(13) + CHAR(10))
Run Code Online (Sandbox Code Playgroud)


Dan*_*iil 2

除了引号或换行符之外,还有更多的东西需要转义。如果有二进制输入(由黑客)怎么办?最好使用PreparedStatement(在java中)或目标语言中的任何其他等效项。Java 示例:

PreparedStatement ps = con.prepareStatement("SELECT * FROM Books WHERE BookTitle IN (?, ?)");
ps.setString(1, "Mars and Venus");
ps.setString(2, "Stack's Overflow
and 
");

ResultSet rs = ps.executeQuery();
....
Run Code Online (Sandbox Code Playgroud)