Что делает символ «@» в SQL?

Я просматривал вопросы и заметил следующее:

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 из выбранной таблицы?

Есть ли на этот счет официальный документ? @ может использоваться для объявления @variable. А также есть встроенные переменные, такие как @@ ERROR, @@ trancount.

ROROROOROROR 02.05.2018 06:14

Для MySQL google для "определяемой пользователем переменной"

huggie 25.02.2020 11:05
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
78
3
130 482
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

Ответ принят как подходящий

@CustID означает, что это параметр, значение которого вы укажете позже в своем коде. Это лучший способ защиты от SQL-инъекций. Создайте свой запрос, используя параметры, а не объединяйте строки и переменные. Механизм базы данных помещает значение параметра туда, где находится заполнитель, и вероятность внедрения SQL отсутствует.

НУЛЬ? Действительно? 'ВЫБРАТЬ * ИЗ ТАБЛИЦЫ ГДЕ ID =' & @Kibbee

Mark Brady 16.12.2008 19:07

@Mark: Не могли бы вы объяснить, почему это правильная попытка SQL-инъекции? Насколько я понимаю, при отправке на SqlServer произошла ошибка.

Michael Todd 27.07.2009 22:47

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

Patrick548 29.11.2012 23:01

Вы говорите, что использование конкатенации строк для sql-запроса может привести к проблемам с sql-инъекцией. Однако, если он используется в api (общедоступном / частном), который используется вашей собственной командой разработчиков, тогда это не должно быть проблемой, верно ??

Eswar 01.10.2018 13:43

@Kibbee, так что я должен использовать @? если мы избавимся от @, тогда custid останется именем переменной?

amjad 28.02.2019 05:59

Это параметр, который вам нужно определить. чтобы предотвратить 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]

Вот как работает @.

В своем ответе опишите подробнее, как работает @.

JSK NS 11.10.2012 15:45

@, за которым следует число, - это параметры в том порядке, в котором они перечислены в функции.

Можете привести пример?

Lucas Vazquez 17.11.2019 06:26

Другие вопросы по теме