Что символ «@» делает в 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 из выбранной таблицы?

72 sql
12.12.2008 03:02:55
Есть ли официальный документ по этому поводу? @ может использоваться для объявления @variable. А также есть некоторые встроенные переменные, такие как @@ ERROR, @@ trancount.
ROROROOROROR 2.05.2018 03:14:26
Для MySQL Google для "пользовательская переменная"
huggie 25.02.2020 08:05:08
7 ОТВЕТОВ
РЕШЕНИЕ

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

56
12.12.2008 04:29:20
НУЛЬ? В самом деле? 'ВЫБРАТЬ * ИЗ ТАБЛИЦЫ, ГДЕ ID =' & @Kibbee
Mark Brady 16.12.2008 16:07:18
@Mark: Не могли бы вы объяснить, как это допустимая попытка SQL-инъекции? Насколько я вижу, это будет ошибка, если отправить SqlServer.
Michael Todd 27.07.2009 18:47:04
Причина, по которой нет возможности внедрения SQL-кода, заключается в том, что @CustID он заменяется строкой. Когда эта база данных получает одну из этих переменных, она знает, что не нужно экранировать переменную для чего-либо внутри нее.
Patrick548 29.11.2012 19:01:35
Использование конкатенации строк для запроса SQL может привести к проблемам с внедрением SQL. Однако, если он используется в API (публичном / частном), который используется вашей собственной командой разработчиков, то это не должно быть проблемой, верно?
Eswar 1.10.2018 10:43:48
@ Кибби, так я должен использовать @? если мы избавимся от @, то custid все еще будет именем переменной?
amjad 28.02.2019 02:59:07

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

29
12.12.2008 03:04:14

Это параметр, который вы должны определить. чтобы предотвратить SQL-инъекцию, вы должны передать все свои переменные в качестве параметров.

2
12.12.2008 03:05:23

Вы можете привыкнуть к синтаксису MySQL: Microsoft SQL @такой же, как MySQL?

2
12.12.2008 03:07:35

То, о чем вы говорите, - это способ написания параметризованного запроса. «@» просто означает, что это параметр. Вы можете добавить значение для этого параметра в процессе выполнения

eg:
sqlcommand cmd = new sqlcommand(query,connection);
cmd.parameters.add("@custid","1");
sqldatareader dr = cmd.executequery();
1
12.12.2008 05:24:25
publish data where stoloc = 'AB143' 
|
[select prtnum where stoloc = @stoloc]

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

0
30.07.2012 20:04:44
В своем ответе приведите более подробную информацию, объясняющую, как @работает.
JSK NS 11.10.2012 11:45:44

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

0
26.07.2017 06:28:37
Можете привести пример, пожалуйста?
Lucas Vazquez 17.11.2019 03:26:01