Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как в качестве параметра передать имя БД ?  [new]
Передатчик
Guest
Добрый день. Хочу в зависимоти от переданного имени обращаться к таблицам указанной БД.
Спасибо.
22 мар 16, 12:27    [18963086]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Передать куда ?
Где и как у вас будет формироваться "обращение к таблицам указанной БД" ?
22 мар 16, 12:30    [18963119]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Передатчик,

Вы должны выбирать базу на клиенте, а не что-то как-то передавать.
Выбрать текущую базу можно запросом USE [DB].
22 мар 16, 12:31    [18963131]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
SQL2008
Member

Откуда: Москва
Сообщений: 4478
Передатчик
Добрый день. Хочу в зависимоти от переданного имени обращаться к таблицам указанной БД.
Спасибо.


USE [DATABASE];


не устроит?
22 мар 16, 12:31    [18963138]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Nik_Kurta
Member

Откуда: Россия, Симферополь
Сообщений: 66
Передатчик,

Как пример:

DECLARE @BaseName varchar(10);
SET @BaseName='DAT'

SET @SQL = 'INSERT INTO DAT0.dbo.tbl_PDS_All (ID_Object,Users,Dates,ID_Product,NumberPDS,ID_Check,ID_Model,Summa,ID_Firma,Flag,ID_Pokup,Notes,PercentUser,PercentDir,ID_Vid)
						SELECT  '+@BaseName+'.dbo.tbl_PDS.ID_Object,'+@BaseName+'.dbo.tbl_PDS.Users,'+@BaseName+'.dbo.tbl_PDS.Dates,'+@BaseName+'.dbo.tbl_PDS.ID_Product, 
						'+@BaseName+'.dbo.tbl_PDS.NumberPDS,'+@BaseName+'.dbo.tbl_PDS.ID_Check,'+@BaseName+'.dbo.tbl_PDS.ID_Model,'+@BaseName+'.dbo.tbl_PDS.Summa, 
						'+@BaseName+'.dbo.tbl_PDS.ID_Firma,'+@BaseName+'.dbo.tbl_PDS.Flag,'+@BaseName+'.dbo.tbl_PDS.ID_Pokup,'+@BaseName+'.dbo.tbl_PDS.Notes,'+@BaseName+'.dbo.tbl_PDS.PercentUser,
						'+@BaseName+'.dbo.tbl_PDS.PercentDir,'+@BaseName+'.dbo.tbl_PDS.ID_Vid
						FROM  DAT0.dbo.tbl_PDS_All RIGHT OUTER JOIN '+@BaseName+'.dbo.tbl_PDS ON tbl_PDS_All.NumberPDS = '+@BaseName+'.dbo.tbl_PDS.NumberPDS
						WHERE  (tbl_PDS_All.NumberPDS IS NULL)'

EXEC(@SQL)


Сообщение было отредактировано: 22 мар 16, 14:41
22 мар 16, 14:26    [18963925]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Передатчик
Guest
2Glory

Хотелось бы как то так

Declare @BaseName nvarchar(50) = 'MyBase1'

select * from [@BaseName].dbi.MyTable

Set @BaseName = 'MyBase2'
select * from [@BaseName].dbi.MyTable

Может я косноязычно изъясняюсь ?
Есть две БД с почти одинаковой структурой, но с разным набором данных хочу чтобы хранимая процедура была одна на все БД, возможно есть нормальное решение ?
22 мар 16, 15:18    [18964406]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Передатчик
2Glory

Хотелось бы как то так

Declare @BaseName nvarchar(50) = 'MyBase1'

select * from [@BaseName].dbi.MyTable

Set @BaseName = 'MyBase2'
select * from [@BaseName].dbi.MyTable

Может я косноязычно изъясняюсь ?
Есть две БД с почти одинаковой структурой, но с разным набором данных хочу чтобы хранимая процедура была одна на все БД, возможно есть нормальное решение ?
Нормальное решение: объединить все ваши базы данных в одну и написать одну ХП.
22 мар 16, 15:20    [18964425]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Jovanny
Member

Откуда:
Сообщений: 1196
Сделайте её системной и запускайте в контексте нужной базы.
22 мар 16, 15:20    [18964428]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Передатчик
Может я косноязычно изъясняюсь ?
Есть две БД с почти одинаковой структурой, но с разным набором данных хочу чтобы хранимая процедура была одна на все БД, возможно есть нормальное решение ?

на пост выше вашего едиственое нормальное решение..но такой подход - имхо издевальтельство на сиквелом
22 мар 16, 15:21    [18964442]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Передатчик
Хотелось бы как то так

Declare @BaseName nvarchar(50) = 'MyBase1'

select * from [@BaseName].dbi.MyTable

Set @BaseName = 'MyBase2'
select * from [@BaseName].dbi.MyTable

Приведенный код - он в воздухе существует ? Или в каком то более материальном виде ?

Передатчик
Есть две БД с почти одинаковой структурой, но с разным набором данных хочу чтобы хранимая процедура была одна на все БД, возможно есть нормальное решение ?

Т.е хранимая процедура все же есть ? И ей нужно при вызове передать параметер ?
22 мар 16, 15:23    [18964457]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Передатчик
хочу чтобы хранимая процедура была одна на все БД
create procedure dbo.MyProc
 @BaseName sysname
as
begin
 declare @p sysname = quotename(@BaseName) + N'.sys.sp_executesql';

 exec @p N'select * from dbo.MyTable';
end;
22 мар 16, 15:31    [18964526]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8823
Передатчик,

Вы не понимаете, что базу данных следует рассматривать как самодостаточный изолированный объект и она должна содержать в себе все то, что ей нужно для работы.
Например, база А не должна терять работоспособность из-за того, что база Б недоступна.Также должна существовать только одна мастер-база, которая обращается к вспомогательным базам при их доступности.

В Вашей ситуации потребуется создать базу В для хранения процедур, обращающихся к базам А и Б, при условии их доступности и наличия требуемых в них таблиц.
22 мар 16, 15:38    [18964585]     Ответить | Цитировать Сообщить модератору
 Re: Как в качестве параметра передать имя БД ?  [new]
Передатчик
Guest
В общем все понятно, всем спасибо, тема закрыта.
22 мар 16, 15:41    [18964612]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить