ďťż
 
[MSSQL] EXECUTE =?ISO-8859-2?Q?wewn=B1trz_funkcji?= ďťż
 
[MSSQL] EXECUTE =?ISO-8859-2?Q?wewn=B1trz_funkcji?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • morebeer.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com