Избегайте ввода двойных кавычек от начала и конца строки - PullRequest
1 голос
/ 10 ноября 2008

В базе данных у меня есть строка с записью «по умолчанию». Я просто хочу заменить это значение по умолчанию на 0. У меня есть что-то вроде:

select * from tblname where test = 'default'

Мне не нужны кавычки вместо слова "default".

хочу

select * from tblname where test = 0

есть ли способ сделать это?

Ответы [ 3 ]

4 голосов
/ 10 ноября 2008

Я предполагаю, что поле test имеет текстовый тип (varchar, char и т. П.).

Первое: обновить таблицу так, чтобы она содержала «0», где она содержит «default».

UPDATE tblname SET test = '0' WHERE test = 'default'

Тогда: выберите все строки с '0' в них. Вы не можете оставить кавычки, потому что они являются частью синтаксиса SQL.

SELECT * FROM tblname WHERE test = '0'

Чтобы исключить кавычки, вы должны превратить поле в числовое (int, float или подобное).

0 голосов
/ 10 ноября 2008

Есть несколько вещей, которые вы можете сделать для простой замены строки, однако я настоятельно рекомендую вам обратить внимание на параметризацию, чтобы обеспечить безопасность инъекций и повторное использование плана запросов.

Параметры также выигрывают, избегая вопроса о кавычках, поэтому просто замените 'default' на (например) @p1 и все будет в порядке. Эта замена может быть:

-- TSQL
REPLACE(@cmd, '''default''', '@p1')

или

// C#
.Replace(@"'default'", @"@p1")

Из C # это будет DbCommand с параметрами; из T-SQL вы можете рассмотреть sp_ExecuteSQL. В любом случае, вы бы хотели получить:

select * from tblname where test = @p1

И поставьте @ p1 в качестве параметра. Итак, из C #:

DbParameter param = cmd.CreateParameter();
param.Value = 0; // etc
cmd.Parameters.Add(param);

Или из TSQL:

EXEC sp_ExecuteSQL @cmd, N'@p1 varchar(50)', 0

(заменить varchar(50) на правильный тип)

0 голосов
/ 10 ноября 2008

Я думаю, вам лучше использовать строки формата

string myVar = "0";
string sql = String.Format(@"select * from tblname where test = \"{0}\"", myVar);

Вам также следует спросить себя, почему вы генерируете встроенный SQL на лету и не используете хранимые процедуры, поскольку именно так могут происходить атаки SQL-инъекцией, если вы не очистите входные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...