SQL Server:删除具有单引号的用户
我需要从系统中删除用户,搜索基于他们的电子邮件。然而,由于一些奇怪的验证,一些用户在电子邮件中有单引号和通配符% 当我试图删除用户时,它抛出了一个错误,因为单引号和其他奇怪的字符。我可以直接在数据库中清理,不过,我想看看我是否可以搜索他们电子邮件中的所有垃圾邮件,并且仍然可以直接从应用程序中删除用户 例如:SQL Server:删除具有单引号的用户,sql,sql-server,Sql,Sql Server,我需要从系统中删除用户,搜索基于他们的电子邮件。然而,由于一些奇怪的验证,一些用户在电子邮件中有单引号和通配符% 当我试图删除用户时,它抛出了一个错误,因为单引号和其他奇怪的字符。我可以直接在数据库中清理,不过,我想看看我是否可以搜索他们电子邮件中的所有垃圾邮件,并且仍然可以直接从应用程序中删除用户 例如: DELETE FROM Customers WHERE Email = 'test@yahoo.com'@countag%and1=1'' 通配符是可以的,因为您不匹配模式,但是对于单引号
DELETE FROM Customers
WHERE Email = 'test@yahoo.com'@countag%and1=1''
通配符是可以的,因为您不匹配模式,但是对于单引号,您需要双引号来转义它
DELETE FROM Customers
WHERE Email = 'test@yahoo.com''@countag%and1=1'''
-- ^ this ^ and this.
最简单的解决方法是使用双引号,因此不必担心嵌入的单引号:
DELETE FROM Customers
WHERE Email = "test@yahoo.com'@countag%and1=1"
你可以试试
delete from customers where charindex('''', email) > 0
要删除电子邮件地址至少包含一个报价的所有客户。。。或者先选择并检查结果,但SQL server不喜欢双精度quotes@user2675939我没有注意到标题暗示它是SQLServer。我会在你的问题中添加标签。这是否意味着我必须首先在电子邮件中搜索引号,如果有,则将其加倍?SQL语句中是如何实现的?就像Delete语句中的Replace函数一样?您能给出更多细节吗?您是否有一个带有特殊字符的电子邮件地址列表,您必须使用这些地址来定位记录,然后将其删除?如果是,这些地址是在另一个表中,还是会传递给您的SQL/脚本?或者类似于用户将通过您的UI输入1个电子邮件地址,该地址可以包含特殊字符,而您的SQL脚本必须使用该地址来定位记录并删除与该电子邮件地址匹配的记录。是的,这是后一部分,用户通过web app输入电子邮件地址,要删除与该电子邮件地址匹配的语句,需要传递该语句
DROP TABLE UsersToDelete
CREATE TABLE UsersToDelete
(
id INT IDENTITY
,email VARCHAR(500)
)
INSERT INTO UsersToDelete
(
-- id -- this column value is auto-generated
email
)
SELECT 'test@yahoo.com''@countag%and1=1''' AS email
UNION
SELECT 'bill.gates@microsoft.com'
UNION
SELECT 'user2675939@stackoverflow.com'
UNION
SELECT 'iamkarlson''''''@google.com'
SELECT utd.id
,utd.email
,CASE
WHEN (SUBSTRING(email ,CHARINDEX('''' ,email ,0) +1 ,1) <>''''
OR SUBSTRING(REVERSE(email) ,CHARINDEX('''' ,REVERSE(email) ,0) +1 ,1) <>'''')
AND email LIKE '%''%'
THEN 1
WHEN SUBSTRING(email ,CHARINDEX('''' ,email ,0) +1 ,1) =''''
AND SUBSTRING(REVERSE(email) ,CHARINDEX('''' ,REVERSE(email) ,0) +1 ,1) =''''
AND email LIKE '%''%'
THEN 0
ELSE 0
END AS [Contains]
,SUBSTRING(email ,CHARINDEX('''' ,email ,0) +1 ,1)
,SUBSTRING(REVERSE(email) ,CHARINDEX('''' ,REVERSE(email) ,0) +1 ,1)
FROM UsersToDelete utd