Я просматривал вопросы и заметил следующее:
SELECT prodid, issue
FROM Sales
WHERE custid = @custid
AND datesold = SELECT MAX(datesold)
FROM Sales s
WHERE s.prodid = Sales.prodid
AND s.issue = Sales.issue
AND s.custid = @custid
Мне было интересно, что делает "@" перед custID? Это просто способ ссылки на custID из выбранной таблицы?
Для MySQL google для "определяемой пользователем переменной"


@ используется как префикс, обозначающий имена хранимых процедур и параметров функций, а также имена переменных.
@CustID означает, что это параметр, значение которого вы укажете позже в своем коде. Это лучший способ защиты от SQL-инъекций. Создайте свой запрос, используя параметры, а не объединяйте строки и переменные. Механизм базы данных помещает значение параметра туда, где находится заполнитель, и вероятность внедрения SQL отсутствует.
НУЛЬ? Действительно? 'ВЫБРАТЬ * ИЗ ТАБЛИЦЫ ГДЕ ID =' & @Kibbee
@Mark: Не могли бы вы объяснить, почему это правильная попытка SQL-инъекции? Насколько я понимаю, при отправке на SqlServer произошла ошибка.
Причина, по которой нет возможности SQL-инъекции, заключается в том, что @CustID заменяется строкой. Когда эта база данных получает одну из этих переменных, она знает, что внутри нее нельзя экранировать переменную.
Вы говорите, что использование конкатенации строк для sql-запроса может привести к проблемам с sql-инъекцией. Однако, если он используется в api (общедоступном / частном), который используется вашей собственной командой разработчиков, тогда это не должно быть проблемой, верно ??
@Kibbee, так что я должен использовать @? если мы избавимся от @, тогда custid останется именем переменной?
Это параметр, который вам нужно определить. чтобы предотвратить SQL-инъекцию, вы должны передать все свои переменные в качестве параметров.
Вы можете использовать синтаксис MySQL: Microsoft SQL @ совпадает с MySQL ?
Вы говорите о том, как написан параметризованный запрос. '@' просто означает, что это параметр. Вы можете добавить значение этого параметра во время выполнения.
eg:
sqlcommand cmd = new sqlcommand(query,connection);
cmd.parameters.add("@custid","1");
sqldatareader dr = cmd.executequery();
publish data where stoloc = 'AB143'
|
[select prtnum where stoloc = @stoloc]
Вот как работает @.
В своем ответе опишите подробнее, как работает @.
@, за которым следует число, - это параметры в том порядке, в котором они перечислены в функции.
Можете привести пример?
Есть ли на этот счет официальный документ? @ может использоваться для объявления @variable. А также есть встроенные переменные, такие как @@ ERROR, @@ trancount.