2009-08-14 22 views
43

Cố gắng tham số hóa giá trị TOP trong câu lệnh sql của tôi.C# SQL Đầu làm tham số

SELECT TOP @topparam * from table1 

command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString(); 

Điều này dường như không hiệu quả. Bất cứ ai có bất cứ đề nghị?
Chỉ cần làm rõ, tôi không muốn sử dụng các thủ tục được lưu trữ.

Trả lời

64

Trong SQL Server 2005 and above, bạn có thể làm điều này:

SELECT TOP (@topparam) * from table1 
+0

Điều này dẫn tôi đến câu trả lời của tôi. Tôi đã đi qua giá trị trong như varchar, chuyển sang int cố định nó. Cảm ơn tất cả. – muhan

+0

Đây chính xác là những gì tôi đang tìm kiếm, cảm ơn! – ActionOwl

+0

Có cách nào để đặt @topparam thành giá trị có nghĩa là nó bỏ qua TOP và trả về tất cả các hàng? –

0

Bạn có thể viết một truy vấn inline:

EXEC 'SELECT TOP' + @topparam + '* FROM ...'

phân tích nó như một int và điều đó sẽ ngăn chặn một cuộc tấn công SQL injection.

8

Bạn cần có ít nhất SQL Server 2005. Mã này hoạt động tốt trong 2005/8 ví dụ ...

DECLARE @iNum INT 
SET @iNum = 10 
SELECT TOP (@iNum) TableColumnID 
FROM TableName 

Nếu bạn có SQL Server 2000, hãy thử tính năng này ...

CREATE PROCEDURE TopNRecords 
@intTop INTEGER 
AS 
SET ROWCOUNT @intTop 

SELECT * FROM SomeTable 

SET ROWCOUNT 0 
GO 
Các vấn đề liên quan