2015-02-23 133 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的答案

相关问题