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

Откуда:
Сообщений: 231
Есть хранимая процедура, которая просматривает базы на сервере и с ними делает какие-то однотипные действия.
пытаюсь через нее создать функцию (create function) в каждой из баз. код этой процедуры вроде :
..................................
DECLARE AllDatabases CURSOR FOR
	SELECT name FROM sys.databases where state_desc='ONLINE'   and (Left (name,4)='Prj_')

	OPEN AllDatabases

	DECLARE @DBNameVar NVARCHAR(128)
	DECLARE @Statement NVARCHAR(2000)

	FETCH NEXT FROM AllDatabases INTO @DBNameVar
	WHILE (@@FETCH_STATUS = 0)
	BEGIN
	PRINT N'Обрабатывается ' + @DBNameVar
	
SET	@Statement=
N'USE ' + @DBNameVar +';'+ CHAR(13)
+ N'CREATE FUNCTION [dbo].[get_ByTheDrawingsSeparately]() RETURNS bit'
+ CHAR(13) + N'WITH EXECUTE AS CALLER'
+ CHAR(13) + N'AS'
+ CHAR(13) + N'begin	'
+ CHAR(13) + N''
+ CHAR(13) + N'	-- Return the result of the function'
+ CHAR(13) + N'	declare @tmp int;'
+ CHAR(13) + N'	declare @result bit;'
+ CHAR(13) + N'	'
+ CHAR(13) + N'	set @tmp=dbo.GetStoredParameter('+CHAR(39)+'ByTheDrawingsSeparately'+CHAR(39)+');'
+ CHAR(13) + N''
+ CHAR(13) + N'	set @result = (cast (@tmp as bit)) ;'
+ CHAR(13) + N'   '
+ CHAR(13) + N'	'
+ CHAR(13) + N'	return (@result);'
+ CHAR(13) + N'end';

	
   --print @Statement;
	EXEC sp_executesql @Statement
	
		FETCH NEXT FROM AllDatabases INTO @DBNameVar;

	END;

	CLOSE AllDatabases;
	
	DEALLOCATE AllDatabases;
............
и вот что имеем с этого

Обрабатывается PROT_VNIPI_8_3
Msg 111, Level 15, State 1, Line 1
'CREATE FUNCTION' must be the first statement in a query batch.

Что делать? Если убрать use, то функция будет создаваться в той же базе, где и выполняемая хранимая процедура!!!!!!!!!!!
6 авг 09, 19:01    [7507851]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Romik76
Member

Откуда:
Сообщений: 231
почитал это. То же что у меня. причем тут точка с запятой, бред какой-то, не работает все равно!
6 авг 09, 19:04    [7507858]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Romik76
Msg 111, Level 15, State 1, Line 1
'CREATE FUNCTION' must be the first statement in a query batch.
А как закончить один query batch и начать другой?
6 авг 09, 19:05    [7507862]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Dan Khatskevich
Member

Откуда:
Сообщений: 324
Romik76
Есть хранимая процедура, которая просматривает базы на сервере и с ними делает какие-то однотипные действия.
пытаюсь через нее создать функцию (create function) в каждой из баз. код этой процедуры вроде :
..................................
DECLARE AllDatabases CURSOR FOR
	SELECT name FROM sys.databases where state_desc='ONLINE'   and (Left (name,4)='Prj_')

	OPEN AllDatabases

	DECLARE @DBNameVar NVARCHAR(128)
	DECLARE @Statement NVARCHAR(2000)

	FETCH NEXT FROM AllDatabases INTO @DBNameVar
	WHILE (@@FETCH_STATUS = 0)
	BEGIN
	PRINT N'Обрабатывается ' + @DBNameVar
	
SET	@Statement=
N'USE ' + @DBNameVar +';'+ CHAR(13)
+ N'CREATE FUNCTION [dbo].[get_ByTheDrawingsSeparately]() RETURNS bit'
+ CHAR(13) + N'WITH EXECUTE AS CALLER'
+ CHAR(13) + N'AS'
+ CHAR(13) + N'begin	'
+ CHAR(13) + N''
+ CHAR(13) + N'	-- Return the result of the function'
+ CHAR(13) + N'	declare @tmp int;'
+ CHAR(13) + N'	declare @result bit;'
+ CHAR(13) + N'	'
+ CHAR(13) + N'	set @tmp=dbo.GetStoredParameter('+CHAR(39)+'ByTheDrawingsSeparately'+CHAR(39)+');'
+ CHAR(13) + N''
+ CHAR(13) + N'	set @result = (cast (@tmp as bit)) ;'
+ CHAR(13) + N'   '
+ CHAR(13) + N'	'
+ CHAR(13) + N'	return (@result);'
+ CHAR(13) + N'end';

	
   --print @Statement;
	EXEC sp_executesql @Statement
	
		FETCH NEXT FROM AllDatabases INTO @DBNameVar;

	END;

	CLOSE AllDatabases;
	
	DEALLOCATE AllDatabases;
............
и вот что имеем с этого

Обрабатывается PROT_VNIPI_8_3
Msg 111, Level 15, State 1, Line 1
'CREATE FUNCTION' must be the first statement in a query batch.

Что делать? Если убрать use, то функция будет создаваться в той же базе, где и выполняемая хранимая процедура!!!!!!!!!!!



а попробуйте use убрать а создавать в виде <databasename>.dbo.functionname
6 авг 09, 19:07    [7507867]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
helloword
Member

Откуда:
Сообщений: 686
use ...
GO
create ...

?
6 авг 09, 19:08    [7507872]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Romik76
Member

Откуда:
Сообщений: 231
Dan Khatskevich,
'CREATE/ALTER FUNCTION' does not allow specifying the database name as a prefix to the object name.
6 авг 09, 19:10    [7507878]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Dan Khatskevich
Member

Откуда:
Сообщений: 324
Romik76,
тогда после use убрать точку с запятой а поставить GO.
6 авг 09, 19:12    [7507882]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
helloword
Member

Откуда:
Сообщений: 686
скорее всего нужно
print @Statement;

скопировать результат и выполнить в др окне)
6 авг 09, 19:13    [7507886]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Romik76
Member

Откуда:
Сообщений: 231
helloword
use ...
GO
create ...

?


Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'Go'.
Msg 111, Level 15, State 1, Line 1
'CREATE FUNCTION' must be the first statement in a query batch.
6 авг 09, 19:14    [7507890]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Dan Khatskevich
Member

Откуда:
Сообщений: 324
Romik76
Dan Khatskevich,
'CREATE/ALTER FUNCTION' does not allow specifying the database name as a prefix to the object name.


а еще попробуйте вот эту строчку, может поможет, хотя нада предположние проверить
N'USE ' + @DBNameVar +'; '+ CHAR(13)
6 авг 09, 19:15    [7507893]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Romik76
Member

Откуда:
Сообщений: 231
helloword

скопировать результат и выполнить в др окне)

у меня 200 баз и надо выполнить 20 дествий над каждой
6 авг 09, 19:15    [7507896]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Dan Khatskevich
Member

Откуда:
Сообщений: 324
Dan Khatskevich
Romik76
Dan Khatskevich,
'CREATE/ALTER FUNCTION' does not allow specifying the database name as a prefix to the object name.


а еще попробуйте вот эту строчку, может поможет, хотя нада предположние проверить
N'USE ' + @DBNameVar +'; '+ CHAR(13)


кстати если вы формируете как параметр то Char(13) мне кажется не нужн. пробовали без него?
6 авг 09, 19:17    [7507899]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Romik76
Incorrect syntax near 'Go'.
Да ну, я только что попробовал
use tempdb
go
create function f(@i int) returns int as
begin
return @i
end
go

Command(s) completed successfully.
покажите что у Вас там print выдал
6 авг 09, 19:18    [7507901]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
helloword
Member

Откуда:
Сообщений: 686
Romik76
helloword

скопировать результат и выполнить в др окне)

у меня 200 баз и надо выполнить 20 дествий над каждой


print вам распечатает для 200 баз sql вы просто скопируете его и запустите в др окне
6 авг 09, 19:18    [7507904]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36799
Вы там сладкое с соленым не путайте. GO не есть команда TSQL и через динамический зайпрос вы никак ее выполнить не сможете.
6 авг 09, 19:19    [7507907]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
helloword
Member

Откуда:
Сообщений: 686
Гавриленко Сергей Алексеевич
Вы там сладкое с соленым не путайте. GO не есть команда TSQL и через динамический зайпрос вы никак ее выполнить не сможете.


вот вот
6 авг 09, 19:20    [7507909]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Romik76
Member

Откуда:
Сообщений: 231
helloword
Romik76
helloword

скопировать результат и выполнить в др окне)

у меня 200 баз и надо выполнить 20 дествий над каждой


print вам распечатает для 200 баз sql вы просто скопируете его и запустите в др окне

спасибо, это кстати интересный вариант
6 авг 09, 19:23    [7507918]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Romik76
Member

Откуда:
Сообщений: 231
up
7 авг 09, 10:00    [7509201]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Romik76
Member

Откуда:
Сообщений: 231
Romik76
helloword
Romik76
helloword

скопировать результат и выполнить в др окне)

у меня 200 баз и надо выполнить 20 дествий над каждой


print вам распечатает для 200 баз sql вы просто скопируете его и запустите в др окне

спасибо, это кстати интересный вариант

те же яйца, вид сбоку.... опять та же ошибка с create function
7 авг 09, 11:04    [7509597]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Romik76
где GO после USE?

для спящего время бодрствования равносильно сну
7 авг 09, 11:09    [7509633]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
@result - пишете в файл
и патом

в цикле..
exec sp_cmdschel ' sqlcmd -S.....' на вход файл и нужную БД :)
-------------------------------------
Jedem Das Seine
7 авг 09, 11:14    [7509667]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
Romik76
Member

Откуда:
Сообщений: 231
я не умею искать в форуме
Уважаемый alexeyvg, большое спасибо!
Maxx - наверное Вы правы
7 авг 09, 11:23    [7509726]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию/view из хранимой процедуры  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31161
Romik76
я не умею искать в форуме
Уважаемый alexeyvg, большое спасибо!
Maxx - наверное Вы правы
Пожалуйста :-)

И даже более свежее есть...
7 авг 09, 12:21    [7510294]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить