有誰知道限制使用類型TableAdapter時返回的行數的最佳方法嗎?選項似乎是:叫我的TableAdapter方法之前,然後set rowcount 0
aftwards set rowcount X
:使用TableAdapter返回的限制行(鍵入的數據集)
- 通行證「頂X」作爲參數(不能開始,我們就SQLS2008
- 發行動態SQL語句做到這一點
- 其他我還沒有想過的東西:)。
非常感謝提前。
有誰知道限制使用類型TableAdapter時返回的行數的最佳方法嗎?選項似乎是:叫我的TableAdapter方法之前,然後set rowcount 0
aftwards set rowcount X
:使用TableAdapter返回的限制行(鍵入的數據集)
非常感謝提前。
您可以使用TOP N,但你必須把括號它像這樣:
SELECT TOP (100) * FROM ...
您也可以參數化,如下所示:
DECLARE @count INT
SET @count = 100
SELECT TOP (@count) * FROM field_company
我使用參數化存儲過程來實現這一點。
create procedure dbo.spFoo @NoOfRows int = 200 AS declare @sql varchar(2000) select @sql = 'select top ' + Cast(@NoOfRows as varchar) + ' * FROM Foo' exec(@sql)
嗯,我不幸的是,我不打算使用存儲過程。另外,你確定你可以參數化SQL Server 2005中的「TOP」的值,即使是在存儲過程中? – 2009-11-04 13:38:40
所以我們現在知道;) – Saar 2009-11-04 14:22:11
我找到了更好的方法。
你不能參數化「TOP」值,但你可以參數化「SET ROWCOUNT X」值。
因此,這個工程:
create procedure test_SelectTopFromTable (@rowCount int) as
begin
set rowcount @rowCount
select * from table
set rowcount 0
end
exec test_SelectTopFromTable 100
不過,我確實需要處理異常情況發生,這將阻止set rowcount 0
聲明運行。我會繼續挖掘。
UPDATE
我的老闆告訴我,使工作(和它是如此簡單,我有點不好意思),但辦法,我一定要得到他後他的回答,而不是使它看起來像我自己找到了。 :)
這對我來說工作正常。
SELECT DISTINCT TOP (@count) FLD1, FLD2 FROM mytable WITH (nolock)
該參數與TableAdapter中的任何其他人一起生成。
TableadApter使用SqlDataAdapter,其中已具有此功能。
怎麼辦:
點擊填充()或FillByXXX()方法
myTradesTableAdapter.Fill(...)
和按F12 - 它會帶給你產生了源代碼由設計師。 複製這種方法。
轉到DataSet設計器中,單擊表適配器,按F7 - 這將創造/開放代碼的TableAdapter的命名空間。
粘貼fill()方法在這裏和修改它有些像下面的例子中:
namespace MyApp.DsMyDataTableAdapters {
public partial class MyTradesTableAdapter
{
//// copy-paste method from generated Fill()
//// and make new name: Fill() ==> FillTop()
//// use the same params and add new one: int topN
public virtual int FillTop( //
DsMyData.MyTradesDataTable dataTable,
int someParameterId,
// ...
int topN) // add new param
{
// original code:
this.Adapter.SelectCommand = this.CommandCollection[0];
this.Adapter.SelectCommand.Parameters[1].Value = someParameterId;
if ((this.ClearBeforeFill == true))
{
dataTable.Clear();
}
// modified code
int returnValue = 0;
if (topN > 0) // validate topN
{
// get topN rows
returnValue = this.Adapter.Fill(0, topN, dataTable);
}
else
{
// get all rows (original code) in case topN = 0 or negative
returnValue = this.Adapter.Fill(dataTable);
}
return returnValue;
}
// ....
}
,然後你可以使用它爲:
int somePrm = 123;
myTradesTableAdapter.Fill(ds.myTradesTable, somePrm) // original - get all rows
myTradesTableAdapter.FillTop(ds.myTradesTable, somePrm, 100) // new - get 100 rows
如果您可以更新此值使參數值100,您可以有一個點:P – 2009-11-04 14:05:55