Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
здравствуйте уважаемые форумчане, с MS SQL работаю недавно.. потому и задаю, возможно и глупый вопрос, Можно ли создать универсальную хранимую процедуру для всех имеющихся у меня баз данных. Например

CREATE PROCEDURE proc1
@BD nvarchar(50)
@tabl nvarchar(50)
AS
BEGIN
     SELECT @tabl from @okl 
END
GO

Где
@okl - название Базы
@tabl - название таблицы и данных которые мне нужно оттуда выбрать....
9 янв 14, 13:01    [15389631]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
https://www.sql.ru/faq/faq_topic.aspx?fid=104
9 янв 14, 13:06    [15389660]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
o-o
Guest
прежде чем в динамику лезть, попробуйте свою хотелку
реализовать в пределах одной базы.
сама конструкция подозрительно пафосная:
"выбрать таблицу из базы"
9 янв 14, 13:46    [15389934]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
o-o,

проблема то в том, что хотелка моя растет не по дням а по часам!:) поэтому и ХОЧУ реализовать задачу в глобальных масштабах..:)
9 янв 14, 14:07    [15390130]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
allkex
поэтому и ХОЧУ реализовать задачу в глобальных масштабах..:)

Универсальный вечный двигатель построить не получится.
9 янв 14, 14:11    [15390177]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Glory
allkex
поэтому и ХОЧУ реализовать задачу в глобальных масштабах..:)

Универсальный вечный двигатель построить не получится.

Вечный двигатель и не хочу строить.. хочу просто универсальный..!:))
9 янв 14, 14:14    [15390204]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
allkex
хочу просто универсальный..!:))

Тоже не получится
Вернее получится настолько громоздко и плохо, что никто эти пользоваться не будет

Сообщение было отредактировано: 9 янв 14, 14:16
9 янв 14, 14:16    [15390221]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Glory
allkex
хочу просто универсальный..!:))

Тоже не получится
Вернее получится настолько громоздко и плохо, что никто эти пользоваться не будет

а это и не для кого нибудь.. это для меня!:)
9 янв 14, 14:17    [15390234]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11543
dynamic sql и sp_executesql

http://technet.microsoft.com/ru-ru/library/ms188001.aspx
9 янв 14, 14:24    [15390292]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
sdet
Member

Откуда:
Сообщений: 463
allkex
Glory
пропущено...

Тоже не получится
Вернее получится настолько громоздко и плохо, что никто эти пользоваться не будет

а это и не для кого нибудь.. это для меня!:)

Железная логика
9 янв 14, 14:24    [15390295]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
sdet,

не, ну тут просто выше писали что типа "НИКТО" пользовать это "универсальное" не будет.. а я буду!
9 янв 14, 14:35    [15390397]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
allkex
а я буду!

Мыши плакали, кололись, но продолжали жрать кактусы.
9 янв 14, 14:38    [15390433]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Glory,

ой... а Расшифруйте пожалуйста вот это.. ка кэто использовать.. а то не догоняю..)

Наверное, одним из первых вопросов, возникающих у начинающих программистов на T-SQL, это вопрос "А как получить выборку из таблицы, имя которой занесено в переменную ?"
Т.к. в T-SQL нет возможности использовать в некоторых частях запроса значения переменных, то единственным доступным решением является использование динамического запроса. Идея очень проста: в специально определнной переменной "собирается" строка запроса, которая должна выполняться. Далее эта строка запускается на выполнение. Запуск можно осуществить двумя способами
- с помощью команды EXECUTE
- с помощью системной процедуры sp_executesql.

Выглядит это приблизительно так
[src]

DECLARE @SQL varchar(8000), @table_name varchar(10)
SET @SQL = 'SELECT * FROM ' + @table_name

exec(@SQL)
--или

exec sp_executesql @SQL

[/SRC]
9 янв 14, 14:57    [15390624]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
allkex
Расшифруйте пожалуйста вот это.. ка кэто использовать..

Скопировать код
Подставить свои значения
Выполнить код
9 янв 14, 14:58    [15390641]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Glory,

А.. я то думал тут сложнее все немного(
9 янв 14, 15:00    [15390654]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
ssas12345
Member

Откуда: откуда и все
Сообщений: 1723
заколебётесь потом отлаживать и поддерживать и будете получать ошибки RunTime и прочие гадости кода-спагетти
9 янв 14, 15:00    [15390655]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
ssas12345
заколебётесь потом отлаживать и поддерживать и будете получать ошибки RunTime и прочие гадости кода-спагетти

Так.... я совсем запутался.. тыкните носом ка кэто выполнить.. не понимаю. хоть убейте.. в хранимых процедурах этого нет.. как его выполнить то(
9 янв 14, 15:06    [15390727]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
allkex
как его выполнить то(

А где вы вообще выполняете запросы то ?

allkex
в хранимых процедурах этого нет..

Чего "этого" ?
DECLARE, EXEC - это команды языка TSQL.
9 янв 14, 15:08    [15390757]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
я пробовал вот так
сначла
DECLARE @SQL varchar(8000), @table_name varchar(10)
SET @SQL = 'SELECT * FROM ' + @table_name


далее

exec(@sql)
@table_name = Имя_таблицы
9 янв 14, 15:08    [15390761]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11543
что это?

exec dbo.MySuperProc 'mybase', 'mytable'
9 янв 14, 15:08    [15390767]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
allkex
я пробовал вот так
сначла
DECLARE @SQL varchar(8000), @table_name varchar(10)
SET @SQL = 'SELECT * FROM ' + @table_name



далее

exec(@sql)
@table_name = Имя_таблицы

Вам бы для начала изучить собственно TSQL. А не сразу писать код.
9 янв 14, 15:11    [15390803]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Glory,

Для начала бы да.. было б вообще идеально.. но сейчас нужно вот сделать что т такое примерно вот этого.. только "НИПАНЯЯЯЯТНА"... Разжуйте пожалуйста.... как вот это выполнить...
9 янв 14, 15:13    [15390822]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
SFlash
Member

Откуда:
Сообщений: 143
У меня вообще один только вопрос.
А что будет делать эта процедура для всех баз, и к тому же еще и выборки для переменных таблиц?
Быть может, для того что вам нужно, нет такой необходимости?
9 янв 14, 15:16    [15390849]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
allkex
Разжуйте пожалуйста...

переварить и помочь срыгнуть ?
9 янв 14, 15:17    [15390864]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
allkex
здравствуйте уважаемые форумчане, с MS SQL работаю недавно.. потому и задаю, возможно и глупый вопрос, Можно ли создать универсальную хранимую процедуру для всех имеющихся у меня баз данных. Например

CREATE PROCEDURE proc1
@BD nvarchar(50)
@tabl nvarchar(50)
AS
BEGIN
     SELECT @tabl from @okl 
END
GO

Где
@okl - название Базы
@tabl - название таблицы и данных которые мне нужно оттуда выбрать....


по поводу растущей хотелки:

1. откуда возьмётся @okl ?
2. зачем @BD
3. чей это синтаксис SELECT @tabl from @okl


Отправьте хотелку книжки почитать
9 янв 14, 15:18    [15390876]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
SFlash,

мне необходимо выполнить, и в дальнейшем выполнять SQL запросы (менять значения в таблицах)
в множестве баз данных. (базы данных берутся например из файла списком или же пишутся вручную.... как в TSQL)
9 янв 14, 15:19    [15390881]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
allkex
..

exec(@sql)
@table_name = Имя_таблицы



set @table_name = 'Имя_таблицы'
set @SQL = 'SELECT * FROM ' + @table_name
 
exec(@sql)


если вы не знаете базовый синтаксис, то рановато вы за такую глобальную задачу взялись.

и тем более стоит прислушаться к мнению специалистов "не надо так"
----

а вобще прежде чем
exec(@sql)

сделайте
select @sql
и посмотрите что за код у вас получился
9 янв 14, 15:27    [15390945]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
StarikNavy
allkex
..

exec(@sql)
@table_name = Имя_таблицы



set @table_name = 'Имя_таблицы'
set @SQL = 'SELECT * FROM ' + @table_name
 
exec(@sql)


если вы не знаете базовый синтаксис, то рановато вы за такую глобальную задачу взялись.

и тем более стоит прислушаться к мнению специалистов "не надо так"
----

а вобще прежде чем
exec(@sql)

сделайте
select @sql
и посмотрите что за код у вас получился


select @sql


Сообщение 137, уровень 15, состояние 2, строка 1
Необходимо объявить скалярную переменную "@sql".
9 янв 14, 15:35    [15391022]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
allkex
StarikNavy
пропущено...



set @table_name = 'Имя_таблицы'
set @SQL = 'SELECT * FROM ' + @table_name
 
exec(@sql)


если вы не знаете базовый синтаксис, то рановато вы за такую глобальную задачу взялись.

и тем более стоит прислушаться к мнению специалистов "не надо так"
----

а вобще прежде чем
exec(@sql)

сделайте
select @sql
и посмотрите что за код у вас получился


select @sql


Сообщение 137, уровень 15, состояние 2, строка 1
Необходимо объявить скалярную переменную "@sql".


не то слово
9 янв 14, 15:37    [15391033]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Winnipuh
allkex
пропущено...


select @sql


Сообщение 137, уровень 15, состояние 2, строка 1
Необходимо объявить скалярную переменную "@sql".


не то слово

Та ну нах. злые вы.. и TSQL этот дурацкий какой то.. пойду лучше в обычном SQL'e покопаюсь... там и то интереснее.. и понятнее..
9 янв 14, 15:43    [15391097]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
SFlash
Member

Откуда:
Сообщений: 143
allkex
SFlash,

мне необходимо выполнить, и в дальнейшем выполнять SQL запросы (менять значения в таблицах)
в множестве баз данных. (базы данных берутся например из файла списком или же пишутся вручную.... как в TSQL)


Я даже уже не спрашиваю для чего это, но сам спросил, потом не обижайся )))

declare @Serv nvarchar(50), @Base nvarchar(100), @l nvarchar(50), @p nvarchar(50), @SQL nvarchar(max)
declare SH cursor for select ServerName, BaseName, log, pass from SHosts where enable=1
open SH
fetch next from SH into @Serv, @Base, @l, @p
while @@FETCH_STATUS=0
BEGIN
SET @SQL='select * from OPENDATASOURCE(''SQLOLEDB'',
              ''Data Source='+@Serv+';User ID='+@l+';Password='+@P+''').'+@Base+' where tra-la-la<>0'
 exec sp_executeSQL @SQL
 fetch next from SH into @Serv, @Base, @l, @p
END
close SH
deallocate SH
9 янв 14, 15:44    [15391098]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Glory
Member

Откуда:
Сообщений: 104760
allkex
Та ну нах. злые вы.. и TSQL этот дурацкий какой то.. пойду лучше в обычном SQL'e покопаюсь... там и то интереснее.. и понятнее..

А что, в обычном SQL можно самому синтаксис придумывать ??
9 янв 14, 15:54    [15391209]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
msn13
Member

Откуда: Скорый поезд №42
Сообщений: 1372
allkex
здравствуйте уважаемые форумчане, с MS SQL работаю недавно.. потому и задаю, возможно и глупый вопрос, Можно ли создать универсальную хранимую процедуру для всех имеющихся у меня баз данных. Например

CREATE PROCEDURE proc1
@BD nvarchar(50)
@tabl nvarchar(50)
AS
BEGIN
     SELECT @tabl from @okl 
END
GO

Где
@okl - название Базы
@tabl - название таблицы и данных которые мне нужно оттуда выбрать....


мне всегда после таких хотелок вспоминаются слова из гражданина поэта ....
- Это круто! НО зачем?
9 янв 14, 15:55    [15391222]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
SFlash
allkex
SFlash,

мне необходимо выполнить, и в дальнейшем выполнять SQL запросы (менять значения в таблицах)
в множестве баз данных. (базы данных берутся например из файла списком или же пишутся вручную.... как в TSQL)


Я даже уже не спрашиваю для чего это, но сам спросил, потом не обижайся )))

declare @Serv nvarchar(50), @Base nvarchar(100), @l nvarchar(50), @p nvarchar(50), @SQL nvarchar(max)
declare SH cursor for select ServerName, BaseName, log, pass from SHosts where enable=1
open SH
fetch next from SH into @Serv, @Base, @l, @p
while @@FETCH_STATUS=0
BEGIN
SET @SQL='select * from OPENDATASOURCE(''SQLOLEDB'',
              ''Data Source='+@Serv+';User ID='+@l+';Password='+@P+''').'+@Base+' where tra-la-la<>0'
 exec sp_executeSQL @SQL
 fetch next from SH into @Serv, @Base, @l, @p
END
close SH
deallocate SH


Вот это меня на долго заставит задуматься....
9 янв 14, 16:37    [15391678]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
А можно расшифровать что тут к чему?
ну хотя бы приблизительно...
9 янв 14, 16:53    [15391871]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Сообщение 208, уровень 16, состояние 1, строка 2
Недопустимое имя объекта "SHosts".
9 янв 14, 17:00    [15391970]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ТС ,выб до "универсального" сначалаб сам t-sql подтянулиб до нормального уровня, и сразу писать "универсально" перехочется
9 янв 14, 17:05    [15392038]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Maxx,

О, мой дорогой друг! понимаешь ли в чем дело! насколько я понял T-SQl это все же язык больше программерский а не админский.. а я Админ.. и поэтому и пытаюсь все универсилизировать! А так же, опять таки насколько я понял, T-SQL знает хорошо тот.. кто знает больше хранимых процедур MS SQL server'a их свойств и параметров вызова.. ну либо логшику то пнимает! А я, в своб очередь, как амин.. немного знаю SQL и логику его действия а в T-sql только влез уже очень хочется отсюдова вылезти... но в то же время хочется эту задачу то добить! а здесь на форуме, по факту, только и слышу что "ты не знаешь T-SQL.. иди учи мат часть!" Собственно я об этом и писал что T-sql не знаю. но сделать надо! вот.
9 янв 14, 17:16    [15392154]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
allkex

Необходимо объявить скалярную переменную "@sql".



DECLARE @SQL varchar(8000), @table_name varchar(100)
set @table_name = 'Имя_таблицы'
set @SQL = 'SELECT * FROM ' + @table_name
exec(@sql)



(хочу освоить вертолет, но пока что падаю с велосипеда)
9 янв 14, 17:21    [15392187]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
allkex,

Ну вот вам уже 10 раз сказали,те кто знает и понимает - не надо так делать.
Ну админ вы .. ну так и админте .... никтож к вам не приходит с озарением ,а давай напишем универсальный скрипт который делает все ,что мне захоцца...хочу ДНС прописываю,хочу юзверя в роли добавляю..етц.
Не тратьте свое время ,на откровенно бесполезную затею.. ибо весь ваш универсальный жележный капут просто разрушиться о скалы операций c данными, не говоря уже о том,что вам прийдеться очнеь сильно подтянуть мат часть как в самом скл,так и в структуре мсскл.... чтоб ета вся мега идея,имела хотя бы приблизительно-практический смыл.
9 янв 14, 17:23    [15392206]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11543
для начала откройте MSSMS и там раскройте списочки баз на сервере и в разделе Tables правой мышью и Select Rows ...

может вам этого хватит и не надо мучать сервере своими t-sql
9 янв 14, 17:26    [15392225]     Ответить | Цитировать Сообщить модератору
 Re: Создание универсальной хранимой процедуры для ВСЕХ баз данных  [new]
allkex
Member

Откуда:
Сообщений: 37
Все я понял свои ошибки)) в запросе select нужно обьявлять свои данные)) тупанул конкретно!:))
9 янв 14, 17:28    [15392237]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить