Вы всегда можете использовать эквивалент (CHAR(39)
), если вы действительно хотите сохранить ''
в базе данных без необходимости экранирования (хотя я не уверен, что вы намеревались сохранить пустую строку или на самом деле хранить две одинарные кавычки):
EXEC('
DECLARE @x TABLE(x VARCHAR(10));
INSERT @x SELECT CHAR(39) + CHAR(39);
SELECT x FROM @x;
');
Обычно я делаю что-то подобное, чтобы избежать конкатенации и некрасивого вложения одинарных кавычек при построении динамического SQL:
DECLARE @sql NVARCHAR(MAX) = N'';
SET @sql = 'SELECT foo = $sq$bar$sq$;';
SET @sql = REPLACE(@sql, '$sq$', CHAR(39));
SELECT @sql;
EXEC sp_executesql @sql;
Нет, это не делает этот конкретный случай более понятным, конечно, но когда вы ссылаетесь на одну и ту же базу данных, таблицу или столбец несколько раз в большой строке, гораздо эффективнее заменить токены ($db$
, $table$
и т. Д.), Чем иметь дело со всем другим беспорядком объединения. ИМХО.