Ответ на самом деле зависит от того, как вы делаете INSERT
.
Если вы указываете SQL-литерал, вам нужно использовать двойной тик:
-- Direct insert
INSERT INTO Table1 (Column1) VALUES ('John''s')
-- Using a parameter, with a direct insert
DECLARE @Value varchar(50)
SET @Value = 'John''s'
INSERT INTO Table1 (Column1) VALUES (@Value)
-- Using a parameter, with dynamic SQL
DECLARE @Value varchar(50)
SET @Value = 'John''s'
EXEC sp_executesql 'INSERT INTO Table1 (Column1) VALUES (@p1)', '@p1 varchar(50)', @Value
Если вы делаете ВСТАВКУ из кода, используйте параметры:
// Sample ADO.NET
using (SqlConnection conn = new SqlConnection(connectionString)) {
conn.Open();
using (SqlCommand command = conn.CreateCommand()) {
command.CommandText = "INSERT INTO Table1 (Column1) VALUES (@Value)";
command.Parameters.AddWithValue("@Value", "John's");
command.ExecuteNonQuery();
}
}
Если ваши данные содержат пользовательский ввод, прямой или косвенный, ИСПОЛЬЗОВАТЬ ПАРАМЕТРЫ . Параметры защищают от атак SQL-инъекций. Никогда не создавайте динамический SQL с помощью пользовательского ввода.