2008-12-12 36 views
49

estaba navegando a través de las preguntas y se dio cuenta esto:¿Qué hace el símbolo "@" en 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 

Me preguntaba lo que el "@" hace frente a custID? ¿Es solo una forma de referenciar el custID de la tabla que se selecciona?

Respuesta

38

El @CustID significa que es un parámetro que va a proporcionar un valor para adelante en el código. Esta es la mejor forma de protegerse contra la inyección de SQL. Cree su consulta utilizando parámetros, en lugar de concatenar cadenas y variables. El motor de la base de datos coloca el valor del parámetro en donde está el marcador de posición, y no hay posibilidad de inyección SQL.

+0

ZERO? De Verdad? 'SELECT * FROM TABLEn WHERE ID =' & @Kibbee –

+8

@Mark: ¿Podría explicarnos cómo se trata de un intento de inyección SQL válido? Por lo que puedo ver, sería un error si se envía a SqlServer. –

+3

La razón de que no haya posibilidad de inyección de SQL es que el '@CustID' se reemplaza por una cadena. Cuando esa base de datos recibe una de estas variables, sabe que no escapará de la variable por nada dentro de ella. – Patrick548

24

@ se utiliza como un prefijo que denota nombres de los parámetros de procedimientos y funciones almacenados, así como los nombres de variables

1

Es un parámetro que debe definir. para evitar la inyección de SQL, debe pasar todas sus variables como parámetros.

1

Usted puede estar acostumbrado a la sintaxis de MySQL: Microsoft SQL @ es el mismo que el de ?

2

Así habría establecido que el valor de lo que @ custID está dentro de esta consulta de selección o antes de hacer la consulta de MySQL?

¿Algo así?

SET @custID = '1'; 
+0

Si el SQL es un procedimiento almacenado, debe configurarlo antes de la consulta. Los detalles para esto son específicos de plataforma de idioma. Si se trata de una consulta pura, deberá definir la variable y luego establecerla: DECLARE @custID int SET @custID = 1; –

1

De lo que está hablando es de la forma en que se escribe una consulta parametrizada. '@' solo significa que es un parámetro. Usted puede agregar el valor para ese parámetro durante el proceso de ejecución

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

Así es como el @ obras.

+3

En su respuesta, brinde más detalles explicando cómo funciona el '@'. –

0

@ seguidos por un número son los parámetros en el orden en que están enumerados en una función.