判断一个字符串中有几个sql语句。
比如" select * from test select * from tempproduct"再这个字符串中有两个查询语句。
语言不限,最好是C#,思路也行。
比如" select * from test select * from tempproduct"再这个字符串中有两个查询语句。
语言不限,最好是C#,思路也行。
调试欢乐多
但为了避免大的查询产生消耗, 限定 所有查询 只允许 输出一行。using System;
using System.Data;
using System.Data.SqlClient;namespace ConsoleApp2
{
class Program
{
static string connString = @"Data Source=.\sqlserver2014;Initial Catalog=tempdb;Integrated Security=True";
static void Main(string[] args)
{
string sql = "select 1 select 2 select 3";
int selectsNum = GetSelectsNum(sql);
Console.WriteLine("Select Num:{0}", selectsNum); Console.Read();
} private static int GetSelectsNum(string sql)
{
int r = 0;
try
{
//既然只是获取 Select 的数量,那就可以限定只输出一行,提高效率
sql += "SET ROWCOUNT 1; ";
using (SqlConnection conn = new SqlConnection(connString))
{
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
r = ds.Tables.Count;
}
}
catch (Exception ex)
{
r = -1;
Console.WriteLine("Exception: {0}", ex.Message);
}
return r;
}
}
}
理论上来说, 只要 SSMS ( , 官方客户端) 能执行的操作, 都是可以通过编程来实现的。
比方说现在有 3 个查询, 点一下下图的图标, 就能快速显示 估计的执行计划, 不需要真正执行。
当然,对你的需求来说, 执行计划是什么内容并不重要, 关键是查到有几个执行计划就可以了。
这个的优势还是比较明显, 我在 #4 的办法对于行数很少, 但有那种聚合函数的, 就没办法快起来。
smo 这一块, 以前只弄过 创建数据库对象 脚本。 目前也没有专门的教程写这个, 但一定能实现你的需求。
给个方向, 你自己先探索一下吧。
恩确实不是很严谨,具体还得看楼主语句的情况,如果没有子查询能用这种直接看select的或者子查询写的也比较规范的就是(select count(*1) ...)也可以想法去掉得到select数量,这种就是比较简单快。当然还是得具体看楼主语句啥样,如果楼主语句很复杂不适合这种简单的判断,就得想别的方法了
所以你的语句也应该修改成 select * from tab1;select * from tab2;