尝试在我的sql语句中参数化TOP的值。C#SQL Top作为参数
SELECT TOP @topparam * from table1
command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString();
这似乎并不奏效。任何人有任何建议?
只是为了澄清,我不想使用存储过程。
尝试在我的sql语句中参数化TOP的值。C#SQL Top作为参数
SELECT TOP @topparam * from table1
command.Parameters.Add("@topparam",SqlDbType.VarChar, 10).Value = somevalue.ToString();
这似乎并不奏效。任何人有任何建议?
只是为了澄清,我不想使用存储过程。
在SQL Server 2005 and above,你可以这样做:
SELECT TOP (@topparam) * from table1
你可以写一联查询:
EXEC 'SELECT TOP' + @topparam + '* FROM ...'
解析它作为一个int,这将防止SQL注入攻击。
你需要有至少SQL Server 2005的这段代码在2005/8例如正常工作......
DECLARE @iNum INT
SET @iNum = 10
SELECT TOP (@iNum) TableColumnID
FROM TableName
如果你有SQL Server 2000,试试这个...
CREATE PROCEDURE TopNRecords
@intTop INTEGER
AS
SET ROWCOUNT @intTop
SELECT * FROM SomeTable
SET ROWCOUNT 0
GO
这使我回答了我的答案。我通过varchar传递值,切换到int修复它。谢谢大家。 – muhan 2009-08-14 01:00:45
这正是我所期待的,谢谢! – ActionOwl 2011-02-09 15:29:32
有没有办法将@topparam设置为一个值,这意味着它忽略TOP并返回所有行? – 2017-10-04 15:09:20