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

Откуда:
Сообщений: 455
Динамически хочу создать функции

Но надо менять контекст базы данных, чтобы функция создавалась в необходимой БД.

Что-то подобное по логике

DECLARE @CutSqlText nvarchar(1000), @MyBase nvarchar(100)
SET @MyBase = 'MyBase'
SET CutSqlText = 'USE '+@MyBase+' CREATE FUNCTION MyFunc() RETURNS INT AS ....'
29 окт 09, 08:39    [7853340]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
hosTuk,

exec server.database.owner.sp_executesql N'СУПЕРПУПЕР ФУНКЦИЯ'

29 окт 09, 09:09    [7853434]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Ken@t
hosTuk,

exec server.database.owner.sp_executesql N'СУПЕРПУПЕР ФУНКЦИЯ'




Спасибо

Завернул так

DECLARE @CurSql nvarchar(2000), @Base nvarchar(100)
SET @Base = 'OT06_MAIN'
SET @CurSql = 'exec '+@Base+'.dbo.sp_executesql
 N''CREATE FUNCTION aaa() RETURNS int AS BEGIN return 0 END'''
exec sp_executesql @CurSql
29 окт 09, 09:22    [7853494]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Завернул так

можно проще:
declare @proc nvarchar(4000), @sql nvarchar(4000)
set @proc = 'tempdb.dbo.sp_executesql'
set @sql = 'select db_name()'
exec @proc @sql

Posted via ActualForum NNTP Server 1.4

29 окт 09, 09:54    [7853628]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Да пожалуй, так лучше как у вас.
29 окт 09, 10:58    [7854221]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Здесь спрошу, не буду отдельной темы создавать.


Столкнулся с такой проблемой при формировании строки

DECLARE @CurSqlText nvarchar(max);
DECLARE @DatabaseName nvarchar(max);
SET @DatabaseName = 'OT07_Schet_test_my'


SET @CurSqlText =
'<Здесь строка>'+DatabaseName+'<Строка продолжается>'
'

Если <Здесь строка> будет больше 4000 символов, то с 4000 симола она сделает +DatabaseName+
Понятно что я могу отделить с 4000 символа '+ОставшиесяСимволы в '<Здесь строка>'.

Как получать конкатенцию nvarchar(max) со строками '<Здесь строка>' и получать тот же nvarchar(max)
29 окт 09, 14:31    [7856492]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
Glory
Member

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


Если <Здесь строка> будет больше 4000 символов, то с 4000 симола она сделает +DatabaseName+

То, что вы видите на экране 4000символов не означает, что в переменной их тоже 4000
29 окт 09, 14:39    [7856565]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
а <Здесь строка> от куда берётся?
ей не судьба быть nvarchar(max)?

--------------------------------------------------------------
Дьявол кроется в деталях.
29 окт 09, 14:39    [7856566]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
hosTuk
Member

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


Если <Здесь строка> будет больше 4000 символов, то с 4000 симола она сделает +DatabaseName+

То, что вы видите на экране 4000символов не означает, что в переменной их тоже 4000


Я вывожу собранную строку и вижу, что с определеннго места она срезается с 4001 символа.

'Select............GROUP BY npakt --4000символ
DEclare @a int ........'+@MyDatabase

В итоге получаю при Exec ошибку синтакса, т.к. срока получается вот такой
'Select............GROUP BY npakt --4000символ'
+@MyDatabase
29 окт 09, 22:12    [7859242]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
hosTuk
Member

Откуда:
Сообщений: 455
Дедушка
а <Здесь строка> от куда берётся?
ей не судьба быть nvarchar(max)?

--------------------------------------------------------------
Дьявол кроется в деталях.




<Здесь строка> - это мой текст запроса, предлагаете каждое сцепление с какой-либо переменной +@DatabaseName делать как:
CAST(<Здесь строка> AS nvarchar(MAX)) + @DatabaseName
29 окт 09, 22:17    [7859255]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31182
hosTuk
Как получать конкатенцию nvarchar(max) со строками '<Здесь строка>' и получать тот же nvarchar(max)
Само так и получается, ничего делать не надо
29 окт 09, 22:25    [7859275]     Ответить | Цитировать Сообщить модератору
 Re: Создание функций в различных базах  [new]
hosTuk
Member

Откуда:
Сообщений: 455
alexeyvg
hosTuk
Как получать конкатенцию nvarchar(max) со строками '<Здесь строка>' и получать тот же nvarchar(max)
Само так и получается, ничего делать не надо


Да действительно получается nvarchar(max).
29 окт 09, 22:30    [7859286]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить