Это немного теоретический ответ, но, возможно, это поможет. Краткая версия - «использовать параметры в запросе», но она помогает понять все детали.
В стандартном SQL строки заключаются в одинарные кавычки, а встроенные одинарные кавычки представлены двумя одинарными кавычками в строке:
SELECT * FROM SomeWhere
WHERE SomeThing = 'He said, "Don''t do it!"';
В некоторых диалектах SQL вместо этого вы можете закрывать строки в двойных кавычках; Затем вам нужно удвоить двойные кавычки, чтобы вставить один экземпляр двойной кавычки:
SELECT * FROM SomeWhere
WHERE SomeThing = "He said, ""Don't do it!""';
Из вопроса неясно, включает ли название компании внешние двойные кавычки, а также средние или просто содержит средние. Однако в принципе правила одинаковы. Предполагая, что все три двойные кавычки являются обязательными, и используя одинарные кавычки в SQL - намного проще в этом контексте:
SELECT c.companyID, c.companyName, c.dateAdded, count(cm.maxID) as NumDirect
FROM RussoundGeneral.dbo.Company c
LEFT JOIN RussoundGeneral.dbo.CompanyMax cm
ON (cm.companyId = c.companyId and cm.maxID is not null)
WHERE CONTAINS ( companyName, '"BLAH "BLAHBLAH" Ltd.' )
GROUP BY c.companyID, c.companyName, c.dateAdded
ORDER BY c.companyName ASC;
Использование двойных кавычек:
SELECT c.companyID, c.companyName, c.dateAdded, count(cm.maxID) as NumDirect
FROM RussoundGeneral.dbo.Company c
LEFT JOIN RussoundGeneral.dbo.CompanyMax cm
ON (cm.companyId = c.companyId and cm.maxID is not null)
WHERE CONTAINS ( companyName, """BLAH ""BLAHBLAH"" Ltd." )
GROUP BY c.companyID, c.companyName, c.dateAdded
ORDER BY c.companyName ASC;
Если вы строите строки на языке программирования, вам нужно беспокоиться о том, чтобы эти кавычки не проходили через все строки в вашем языке программирования. Например, если вы строите строковый литерал в C, вы должны будете избегать двойных кавычек с обратной косой чертой:
static const char sql_stmt[] =
"SELECT c.companyID, c.companyName, c.dateAdded,\n"
" COUNT(cm.maxID) AS NumDirect\n"
" FROM RussoundGeneral.dbo.Company c\n"
" LEFT JOIN RussoundGeneral.dbo.CompanyMax cm\n"
" ON (cm.companyId = c.companyId AND cm.maxID IS NOT NULL)\n"
" WHERE CONTAINS(companyName, \"\"\"BLAH \"\"BLAHBLAH\"\" Ltd.\")\n"
" GROUP BY c.companyID, c.companyName, c.dateAdded\n"
" ORDER BY c.companyName ASC";
С другой стороны, если вы читаете данные от пользователя, например, название компании, вы просто должны убедиться, что прочитанное правильно указано в кавычках.
Те, кто сказал «использовать параметры», правы: это намного проще и надежнее, и менее уязвимо для атак с использованием SQL-инъекций (см. XKCD , если вы еще этого не видели). Но если вы понимаете основы, вы можете адаптироваться к фактическим требованиям вашей системы.
Последнее замечание: в стандартном SQL двойные кавычки заключают в себе «идентификаторы с разделителями». То есть двойные кавычки окружают имя, которое должно рассматриваться как имя чего-либо в базе данных, а не как строковый литерал. В MS SQL Server [квадратные скобки] служат той же цели; то, что находится в скобках - это имя столбца или что-то еще внутри базы данных. Многие системы более гибкие, чем это; не все системы одинаковы в том, как они отличаются от стандарта.