2012-06-13 3 views
0

Я летающий стажер new для T-SQL, и мне нужно запустить SQL-запрос выбора в различных базах данных. То, что я хотел бы сделать, это использовать «if exists», чтобы избежать ошибки, потому что некоторые из баз данных в списке, чтобы этот оператор выполнялся, больше не существует. Однако я не могу понять, как применить его к моему заявлению. Любая помощь будет принята с благодарностью. Ниже Постулаты меня и еще стажер писал:T-SQL, если существует

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 

< db_name> где переданному в параметре, который является имя базы данных, будет идти.

+0

http://stackoverflow.com/questions/679000/how-to-check-if-a -database-exists-in-sql-server – codingbiz

+0

Я предполагаю, что я не должен был израсходовать ту часть, где я пытался просто вставить «если существует» вокруг моего утверждения, и он не работал ... – Mike

ответ

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 затем запустите скрипт, вы увидите написанный скрипт, который затем можно будет поместить в редактор запросов для выполнения.

+0

Я думаю, что это будет хорошо работать, но происходит то, что ИТ-отдел имеет список на сайтах интрасети, и каждый сайт можно щелкнуть, чтобы просмотреть журнал, который обратился к нему. вы также можете щелкнуть ссылку для каждого сайта, чтобы узнать, какие активные «вопросы» существуют для сайта. однако некоторые сайты больше не используются, поэтому журнал все еще существует, но база данных «вопросов» исчезла, поэтому, когда ссылка на вопросы была нажата, она ошибочно. Итак, что бы я хотел сделать, это: когда клика по ссылке и оператор SQL возвращает, что db не существует, он загружает другую страницу, говорящую, что БД больше не существует – Mike

+0

Я бы предположил, что проблема здесь связана с приложение неправильно обрабатывает ошибки. У вас есть доступ к рефакторингу для вызова хранимой процедуры? –

+0

У меня есть доступ, но я не знаю, как создать хранимую процедуру. поэтому я надеялся, что «если есть» будет быстрым решением. – Mike

0

Я получил его для работы. Я думаю, что это немного хакей, но то, что я сделал, это поймать исключение и просто изменить ярлык на странице, чтобы отразить, что база данных не существует.

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 Statement, как это было, а не пытаться розыгрыши с ним

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