T-SQL如果存在

时间:2012-06-13 21:07:57

标签: tsql

我是T-SQL的新实习生,我必须在各种数据库上运行sql select语句。我想要做的是使用'if exists'来防止错误发生,因为列表上执行此语句的某些数据库不再存在。但是,我无法弄清楚如何将它应用到我的陈述中。任何帮助将不胜感激。以下是我的判断,另一位实习生写道:

select distinct mg.MatterName, mg.ClientNumber, mg.MatterNumber,grp.groupName as SecurityGroup
from (select distinct mat.matterName, mat.clientNumber, mat.matterNumber, usr.GroupID
    from <db_name>.dbo.matter mat
    inner join <db_name>.dbo.usrAccount usr
    on usr.NTlogin=mat.matterCreateBy) as mg
          inner join <db_name>.dbo.usrGroup grp
          on mg.groupID=grp.groupID
order by matterName

&lt; DB_NAME&GT;是传入的参数,即数据库名称的位置。

2 个答案:

答案 0 :(得分:1)

您可以使用sp_MSforeachdb枚举实例上的所有数据库。

这类似于:

exec sp_MSforeachdb 'select distinct mg.MatterName, mg.ClientNumber, mg.MatterNumber,grp.groupName as SecurityGroup from (select distinct mat.matterName, mat.clientNumber, mat.matterNumber, usr.GroupID     from ?.dbo.matter mat     inner join ?.dbo.usrAccount usr     on usr.NTlogin=mat.matterCreateBy) as mg           inner join ?.dbo.usrGroup grp           on mg.groupID=grp.groupID order by matterName'

或者,您可以使用动态sql来制作脚本:

select 'use ' + name + ';' + char(13) + 'select distinct mg.MatterName, mg.ClientNumber, mg.MatterNumber,grp.groupName as SecurityGroup' +CHAR(13) + 'from (select distinct mat.matterName, mat.clientNumber, mat.matterNumber, usr.GroupID' + char(13) + 'from dbo.matter mat' + char(13) + 'inner join dbo.usrAccount usr on usr.NTlogin=mat.matterCreateBy) as mg' + char(13) + 'inner join dbo.usrGroup grp on mg.groupID=grp.groupID' + CHAR(13) + 'order by matterName;'
from master.sys.databases where database_id>4

如果您将输出重定向到SSMS中的“结果到文本”然后运行脚本,您将看到一个脚本,然后您可以将其放入查询编辑器中执行。

答案 1 :(得分:0)

我得到了它的工作。我认为这有点hackey但我所做的是捕获抛出的异常,只是更改页面上的标签以反映数据库不存在。

 DataAccess dal = new DataAccess();
 dal.SelectedConnectionString = "WebServer08";

 String exNetName = Request.QueryString["name"];
 if (exNetName != null && !exNetName.Equals(""))
 {
     try
     {
        gvMatters.DataSource = dal.GetMatters(exNetName);
        gvMatters.DataBind();
      }
      catch (Exception ex)
      {
         noDB.Text = "This database doesn't exist.";
         gvMatters.Visible = false;
      }
 }

我刚刚离开SQL语句而不是试图搞砸它