2008-12-12 28 views
49

Tôi vừa xem qua các câu hỏi và nhận thấy điều này:Biểu tượng "@" làm gì trong 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 

tôi đã tự hỏi những gì "@" làm trước ID Khách hàng? Là nó chỉ là một cách để tham chiếu custID từ bảng được chọn?

Trả lời

38

Các @CustID có nghĩa đó là một thông số mà bạn sẽ cung cấp một giá trị cho sau này trong mã của bạn. Đâ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 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 để chèn SQL.

+0

ZERO? Có thật không? 'SELECT * FROM TABLEn WHERE ID =' & @Kibbee –

+8

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

+3

Lý do không có khả năng tiêm SQL là '@CustID' được thay thế bằng một chuỗi. Khi cơ sở dữ liệu đó nhận được một trong các biến này, nó biết không thoát khỏi biến cho bất kỳ thứ gì bên trong nó. – Patrick548

24

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

1

Tham số của nó mà bạn cần xác định. để ngăn chặn SQL Injection bạn nên vượt qua tất cả các biến của bạn trong các tham số.

1

Bạn có thể sử dụng cú pháp của MySQL: Microsoft SQL @ cũng giống như của ?

2

Vì vậy, bạn sẽ thiết lập những gì @ giá trị ID Khách hàng là bên trong truy vấn chọn này hoặc trước khi bạn thực hiện truy vấn MySQL?

Điều gì đó tương tự?

SET @custID = '1'; 
+0

Nếu SQL là một thủ tục được lưu trữ, bạn sẽ đặt nó trước truy vấn. Các chi tiết cho điều này là ngôn ngữ \ platform cụ thể. Nếu đó là truy vấn thuần túy, bạn sẽ phải xác định biến và sau đó đặt biến: DECLARE @custID int SET @custID = 1; –

1

Điều bạn đang nói đến là cách truy vấn được tham số được viết. '@' chỉ biểu thị rằng đó là một tham số. Bạn có thể thêm giá trị cho tham số trong quá trình thực hiệ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] 

này là làm thế nào các công trình @.

+3

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

0

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

Các vấn đề liên quan