[MSSQL] EXECUTE =?ISO-8859-2?Q?wewn=B1trz_funkcji?=
jerry - 09-12-2005 19:53
[MSSQL] EXECUTE =?ISO-8859-2?Q?wewn=B1trz_funkcji?=
Witam,
Jest funkcja zwracająca tabelę. W ciele funkcji znajdują się wywołania procedur. Parsowanie przechodzi lecz w trakcie wywołania funkcji leci błąd:
"Only functions and extended stored procedures can be executed from within a function."
Czy da się jakoś wywołać procedurę wewnątrz funkcji? Proszę o pomoc.
.... rzucę kod funkcji:
CREATE FUNCTION dbo.fpProcessGraf( @pi_ProcessVer_Id NUMERIC(38,0))
RETURNS @RESULT TABLE( ProcessDef_Id NUMERIC(38,0) ,ProcessSymbol VARCHAR(2000)) AS BEGIN DECLARE @i INTEGER DECLARE @j INTEGER DECLARE @pi_NoNodes NUMERIC(38,0)
DECLARE @ProcessDef_Id NUMERIC(38,0) DECLARE @ProcessVer_Id NUMERIC(38,0)
-- create temporary ticket tables EXECUTE dbo.rCreateTemporaryTicketTables -- EXECUTE dbo.rProcessVerGraf @pi_ProcessVer_Id
SET @i = 1 SELECT @pi_NoNodes = COUNT(*) FROM dbo.Ticket_ProcessGraf WHERE SP_ID = @@SPID WHILE @i <= @pi_NoNodes BEGIN SELECT @ProcessDef_Id = DefId FROM dbo.Ticket_ProcessGraf WHERE ID = @i AND SP_ID = @@SPID SELECT @ProcessVer_Id = NodeId FROM dbo.Ticket_ProcessGraf WHERE ID = @i AND SP_ID = @@SPID
INSERT INTO @RESULT ( ProcessDef_Id ,ProcessSymbol) VALUES ( @ProcessDef_Id ,@ProcessSymbol)
SET @i = @i + 1 END; EXECUTE dbo.rDeleteFromTicketTables
RETURN END GO
jerry - 09-12-2005 19:53
> Czy da się jakoś wywołać procedurę wewnątrz funkcji? Proszę o pomoc.
już znalazłem.
NIE DA SIĘ. Z funkcjami w MSSQL to ja się dziwie, że w ogóle coś da się robić, np. da się je utworzyć... Za to lista czego się nie da jest dość długa:
* Functions can't execute stored procedures. A function can only execute functions and some xp's, but not sp's. This limitation immediately disqualifies function as a candidate for solving use cases 1 and 3. * Functions can't create temporary or any tables. In order to return a result set of an xp, a function must be able to store the result set somewhere. Tables are a natural choice. Unfortunately, functions can't change the global database state. This includes the restriction of creating any temporary or permanent tables that will indeed change the global database state. * Functions can't access temporary tables. Even if there were a pre-created global temporary table, SQL Server still disallows inserting data to this or any existing temporary table from within a function. * Functions can't insert into an existing table. Another even more compromising idea is to create a permanent table outside of a function. However, inserting into an existing permanent table from within a function is considered changing global database state as well. * The result set of executing DBCC, sp, or xp can't be inserted into a table variable. Well, what about using a table variable to store the result set? Unfortunately, you can't use EXECUTE to insert data into a table variable. However, EXECUTE is the only way within a function to issue a SQL string that may include DBCC, sp, and xp. Under this last limitation, we've just exhausted our last resort for functions, and have to conclude that UDFs simply aren't the answer to any of these use cases.
pozdrawiam,
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Wydajność baz danych w zależności od poziomu izolacji ANSI/ISO
Czy zna (obsługuje) ktoś program Iso Draw ?
MYSQL - kodowanie w ISO-PL
strona plus baza w iso do utf-8
Kodowanie: z iso na utf
MSSQL Express czy Oracle Express
Pobierananie danych z innej bazy danych w MSSQL
Migracja MSSQL 2005 CTP na 2005 Express
[mssql] insert do tabeli na podstawie danych z innej tabeli
Konwesja znaków w dump'ie bazy danych - ISO -> utf-8 -> ISO -> utf-8
zanotowane.pldoc.pisz.plpdf.pisz.plmorebeer.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|