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

Откуда: Питер
Сообщений: 670
а до создания процедуры идет так же динамическое создание БД.
Собственно, если пишу так:

set @sql = N'
CREATE PROCEDURE SELECT_ALL (@date1 datetime, @date2 datetime, @AddedParam nvarchar(1000)) AS
.........
'

exec sp_executesql @sql

то процедура добавляется не в созданную базу, а в ту, к которой коннекчен QA (я не спрашиваю почему, это понятно
если делаю:

set @sql = N'
use '
+@dbname+'_mirror
CREATE PROCEDURE SELECT_ALL (@date1 datetime, @date2 datetime, @AddedParam nvarchar(1000)) AS
.........
'

exec sp_executesql @sql

то пишет, что "'CREATE PROCEDURE' must be the first statement in a query batch."
а если делаю:

set @sql = N'
use '
+@dbname+'_mirror
'

exec sp_executesql @sql
set @sql = N'
CREATE PROCEDURE SELECT_ALL (@date1 datetime, @date2 datetime, @AddedParam nvarchar(1000)) AS
.........
'

exec sp_executesql @sql

то также создает в приконнекченной базе.
Как делать?
25 авг 03, 13:42    [313554]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А так?
      set @sql = N'

use '
+@dbname+'_mirror
GO
CREATE PROCEDURE SELECT_ALL (@date1 datetime, @date2 datetime, @AddedParam nvarchar(1000)) AS
.........
GO
'

exec sp_executesql @sql
25 авг 03, 13:47    [313563]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
Mihail R.
Member

Откуда: 53°21' с.ш. 83°47' в.д.
Сообщений: 281
добавить
go

не пробовал
25 авг 03, 13:47    [313564]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
Alex Antonoff
Member

Откуда: Из лесу вестимо
Сообщений: 1251
Попробуй

OPENROWSET ( 'provider_name'
, { 'datasource' ; 'user_id' ; 'password'
| 'provider_string' }
, { [ catalog. ] [ schema. ] object
| 'query' }
)
25 авг 03, 13:51    [313580]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
lirik
Member

Откуда: Город над Невой
Сообщений: 80
Попробуй CREATE PROCEDURE ИмяБазы.Владелец.SELECT_ALL и далее по тексту
25 авг 03, 13:52    [313584]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
Incorrect syntax near 'GO'.
А теперь объясните, почему должно работать-то???
GO - это ведь не TSQL-инструкция, пишут же, что
"GO is not a Transact-SQL statement; it is a command recognized by the osql and isql utilities and SQL Query Analyzer"
ее кстати ведь можно из QA поменять на любую другую...
25 авг 03, 13:53    [313586]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
2lirik:
если с указанием того, что вы писали, то пишет:
'CREATE PROCEDURE' does not allow specifying the database name as a prefix to the object name.
25 авг 03, 13:56    [313594]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
По-поводу GO, автор уже сам отписал. А по поводу sp_executesql:

sp_executesql
...
Changes in database context last only to the end of the sp_executesql statement.


А зачем динамический SQL здесь нужен?
25 авг 03, 13:57    [313601]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2385
Блог
А создать файло со скриптом и потом прогнать? Как в файл писать - не знаю, найдите сами, а прогнать так
EXEC xp_cmdshell 'isql -S server -U username -P pwd -i filename'
25 авг 03, 14:06    [313623]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
2 pkarklin:
Динамика нужна т.к. эта процедура должна создаваться внутри процедуры. Там же и создание базы и создание таблиц.
2 Павел Воронцов:
Извращение какое-то... Неужели иначе нельзя?
25 авг 03, 14:20    [313655]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Динамика нужна т.к. эта процедура должна создаваться внутри процедуры. Там же и создание базы и создание таблиц.

Ну так не получиться никак сменить контекст бд и CREATE PROC туда же запихать? А зачем такие навороты нужны. Задачу можно подробнее описать.
25 авг 03, 14:27    [313667]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2385
Блог
На мой взгляд извращение - это как раз чем Вы пытаетесь заниматься. Создать файл со всеми необходимыми декларациями гораздо проще один раз на мой взгляд. Да и отслеживать изменения в нём куда как проще...
25 авг 03, 14:37    [313705]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Пардон за GO - ступил!!!

Предлагаю следующий изврат. В базе model насоздавать "свои" объекты и...

CREATE DATABASE...
25 авг 03, 14:45    [313738]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
2 tpg

Да почему же изврат. Тока так и будет по уму.
25 авг 03, 14:47    [313742]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А вдрук ему нада базы с разными объектами. Баз вного, объектов вного... и фсе разные... model постоянно менят!!!
25 авг 03, 14:49    [313748]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
О-о-о!!! Ещё один изврат на ум пришел - писать напрямую в системные таблицы (syscomments вчастности).
25 авг 03, 14:51    [313752]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
А если так попробовать?


select @spname = @dbname + '.dbo.' + 'sp_executesql'

set @sql = N'
CREATE PROCEDURE SELECT_ALL (@date1 datetime, @date2 datetime, @AddedParam nvarchar(1000)) AS

.........

'


exec @spname @sql
25 авг 03, 14:56    [313773]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
Да чё вы такие трудные-то? (ой, вырвалось)
Задача проста: Существует некая гипотетическая структура "следящей" базы данных с некоторым количеством таблиц и хранимых процедур. Нужна возможность создавать эту БД для любой другой БД с любой структурой а-ля вот так:

exec createMirrorDB @target_DBname = 'db1'

Внутри данной процедуры содержится создание новой БД, объекты которой (сама БД + таблицы) имеют префикс "db1_". Ну вот нужно мне так!!! Согласитесь, что задача не столь тупа, если рассматривать ее в теории.
25 авг 03, 14:58    [313780]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
Белов Владимир
Member

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


Declare
@dbname sysname,
@nsql nvarchar(4000)

select @dbname = "database_mirror"
select @nsql = "create procedure " + @dbname + ".dbo.select_all ..."
exec (@nsql)
25 авг 03, 15:05    [313787]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
lirik
Member

Откуда: Город над Невой
Сообщений: 80
2Белов Владимир
Я вроде такой же бред предлагал. Да только:
'CREATE PROCEDURE' does not allow specifying the database name as a prefix to the object name.
Заодно прошу прощения - сглупил.
Или я снова не прав?
25 авг 03, 15:10    [313797]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
Ох уж этот Белов... Даже не слышал про ошибку #166 ...
25 авг 03, 15:11    [313799]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2385
Блог
Согласитесь, что задача не столь тупа, если рассматривать ее в теории.

Не, не согласимся. Тупа. Зачем это Вам нужно?
25 авг 03, 15:13    [313800]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
2 Белов Владимир:
'CREATE PROCEDURE' does not allow specifying the database name as a prefix to the object name.
25 авг 03, 15:14    [313802]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
2 Павел Воронцов:
Тебе тем не хватает на форуме? Или так, количество постов себе зарабатываешь на будущее?
Если уж после:
Существует некая гипотетическая структура "следящей" базы данных с некоторым количеством таблиц и хранимых процедур. Нужна возможность создавать эту БД для любой другой БД с любой структурой а-ля вот так:
exec createMirrorDB @target_DBname = 'db1'
Внутри данной процедуры содержится создание новой БД, объекты которой (сама БД + таблицы) имеют префикс "db1_". Ну вот нужно мне так!!!

следует Зачем это Вам нужно, о чем вообще с человеком можно разговаривать?
25 авг 03, 15:17    [313804]     Ответить | Цитировать Сообщить модератору
 Re: Как динамическим SQL создать процедуру в нужной БД?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31429
2ale-805
Так мой работающий вариант будете использовать или нет?
Форум-то хорош именно лицензионными отчислениями за правильные ответы :-)
25 авг 03, 15:21    [313815]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить