2015-02-23 107 views
-1
SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC 

我想替換查找「TOP 100」字符串,並以「TOP 200」或任何其他值替換它。替換「100強」的字符串與其他字符串值

你可以讓我知道如何在C#中做到這一點?

+0

您的c#代碼在哪裏? – 2015-02-23 07:51:01

+0

顯示更多詳細信息!例如那些保存在文本文件中的字符串? – chouaib 2015-02-23 07:52:50

回答

2

這聽起來我,如果你只是想替換另一個字符串的一部分,所以像:

string sql = "SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC"; 
sql = sql.Replace("TOP 100", "TOP 200"); 

如果數量是動態的,你想用一個不同的你可以將其替換使用正則表達式:

string sql = "SELECT TOP 100 * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC"; 
string pattern = @"\bTOP\b *(\d+)"; 
sql = Regex.Replace(sql, pattern, m => "TOP 200"); 
+0

謝謝!但它並不總是TOP 100,它可能是TOP 500或其他任何東西。我需要找到什麼是從字符串TOP'什麼'的價值,然後用TOP'任何'取代它 – PrinceT 2015-02-23 08:01:50

+0

@PrinceT:然後使用正則表達式。我編輯了我的答案。我',我不是正則表達式專家,所以也許它是不可取的。但它似乎工作:https://regex101.com/r/kJ9zI7/1 – 2015-02-23 08:33:16

+0

好吧..罰款..精湛! – PrinceT 2015-02-23 08:37:22

0
DECLARE @topval int=100 

SELECT TOP @topval * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC 
+2

你可以讓我知道如何在C#中做到這一點? – PrinceT 2015-02-23 07:50:28

+0

@PrinceT你可以使用sqlparameters。顯示您的C#代碼 – 2015-02-23 07:51:55

+0

此語法無效,請嘗試使用 – Andomar 2015-02-23 09:12:32

0

如果不使用存儲過程,你可以連接在C#中的命令文本的限制:

int toplimit = 200; 

cmd.CommandText="SELECT TOP " + toplimit.ToString() + " * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC"; 
1

如果你正在寫在C#代碼查詢,你可以使用:

int topCount=1000; 

string query= "SELECT TOP ("+i.toString()+") * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC" 

但是,如果你想發送參數到你的SP,那麼你可以使用:

Declare @i int=1000; 

SELECT TOP (@i) * FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC 
+0

這是比接受的答案黑客更理智的方法 – Andomar 2015-02-23 09:12:57

0

我想應該是爲簡單如此

private string GetSql(int maxRecords) 
    { 
     string statement = "SELECT TOP " + maxRecords + " FROM DSMS_Log.dbo.LoggingDetail WITH(NOLOCK) ORDER BY LogTime DESC "; 

     return statement; 
    } 

您還可以修改參數並更改您的SQL查詢。

0

我會爲此使用正則表達式。因爲我認爲它是在一個聲明中獲得所有變體的最佳方式。

string oldString = "Select top 500 from wherever"; 
string newLimit = "top 20"; 
string result = System.Text.RegularExpressions.Regex.Replace(oldString , "TOP (\\d)+",newLimit , System.Text.RegularExpressions.RegexOptions.IgnoreCase); 

所以,把你的舊字符串,請更換「TOP X」字符串作爲newLimit在我的例子給出另一個版本。

0

對於C#解決方案,您將使用參數而不是字符串操作更好。

只是這樣的:

int count = 200; 
var sql = string.Format("SELECT TOP {0} FROM [Rest_Of_Your_Query]", count); 

,如果你會用一個參數會更容易讓你知道什麼時候改變(如果要替換僅當值是100),並以該值(200,300)。

對於SQL解決方案,請查看@Ganesh_Devlekar的答案