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

Я хочу заменить строку «TOP 100» и заменить ее «ТОП 200» или любым другим значением.Заменить строку «Top 100» другим строковым значением

Не могли бы вы дать мне знать, как это сделать на C#?

+0

Где ваш код C#? –

+0

подробнее! например, строки, сохраненные в текстовом файле? – chouaib

ответ

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

+0

@PrinceT: затем использовать регулярное выражение. Я отредактировал свой ответ. Я, м, не эксперт по регулярному выражению, поэтому, возможно, он невозможен. Но, похоже, это работает: https://regex101.com/r/kJ9zI7/1 –

+0

хорошо .. прекрасный ..превосходный !! – PrinceT

0
DECLARE @topval int=100 

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

Не могли бы вы дать мне знать, как это сделать на C#? – PrinceT

+0

@PrinceT вы можете использовать sqlparameters. показать код C# –

+0

Этот синтаксис недействителен, попробуйте его – Andomar

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

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 х» строку с другой версии дается как 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

Смежные вопросы