Biểu tượng “@” làm gì trong SQL?


76

Tôi đã duyệt qua các câu hỏi và nhận thấy điều này:

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

Tôi đã tự hỏi những gì "@" ở phía trước của custID? Nó chỉ là một cách để tham chiếu đến custID từ bảng đang được chọn?


Có một tài liệu chính thức về điều này? @ có thể được sử dụng để khai báo @variable. Và cũng có một số biến tích hợp như @@ ​​ERROR, @@ trancount.
ROROROOROROR

Đối với MySQL, google cho "biến do người dùng xác định"
huggie

Câu trả lời:


58

@CustID có nghĩa là đó là một tham số mà bạn sẽ cung cấp giá trị cho mã của mình sau này. Đây là cách tốt nhất để bảo vệ chống lại SQL injection. Tạo truy vấn của bạn bằng cách sử dụng các tham số, thay vì nối các chuỗi và biến. Công cụ cơ sở dữ liệu đặt giá trị tham số vào vị trí của trình giữ chỗ và không có cơ hội để đưa vào SQL.


SỐ KHÔNG? Có thật không? 'SELECT * FROM TABLEn ĐÂU ID =' & @Kibbee

9
@Mark: Bạn có thể giải thích đó là một nỗ lực chèn SQL hợp lệ như thế nào không? Theo như tôi thấy, nó sẽ bị lỗi nếu được gửi đến SqlServer.
Michael Todd

4
Lý do mà không có khả năng SQL injection là nó @CustID được thay thế bằng một chuỗi. Khi cơ sở dữ liệu đó nhận được một trong những biến này, nó sẽ biết rằng không được thoát khỏi biến đối với bất kỳ thứ gì bên trong nó.
Patrick548, 29/11/12

Bạn cho rằng việc sử dụng nối các chuỗi cho một truy vấn sql có thể dẫn đến các vấn đề về chèn sql. Tuy nhiên, nếu nó được sử dụng trong api (công khai / riêng tư) được sử dụng bởi nhóm phát triển của riêng bạn, thì đó không phải là vấn đề đúng không ??
Eswar

@Kibbee, vậy tôi có phải sử dụng @ không? nếu chúng ta loại bỏ @, thì custid vẫn là một tên biến?
amjad

31

@ được sử dụng như một tiền tố biểu thị các tên tham số hàm và thủ tục được lưu trữ cũng như tên biến


3

Bạn có thể đã quen với cú pháp của MySQL: Microsoft SQL @giống với MySQL?


2

Đây là một tham số mà bạn cần xác định. để ngăn chặn SQL Injection, bạn nên chuyển tất cả các biến của mình vào dưới dạng tham số.


1

Những gì bạn đang nói đến là cách một truy vấn được tham số hóa được viết. '@' chỉ biểu thị rằng nó là một tham số. Bạn có thể thêm giá trị cho tham số đó trong quá trình thực thi

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]

Đây là cách @hoạt động.


4
Trong câu trả lời của bạn, cung cấp thêm chi tiết giải thích cách @hoạt động.
JSK NS

0

@ theo sau là một số là các tham số theo thứ tự chúng được liệt kê trong một hàm.


Có thể cho một ví dụ xin vui lòng?
Lucas Vazquez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.