So, wie Du es in Deinem 2. Post gezeigt hast, sollte es Dir ein Recordset zurückliefern. Wenn Du mit temporären Tabellen in Multi-Userumgebungen arbeitest, solltest Du Dir eine Routine schreiben, die eine eindeutig benamste Tabelle erzeugt. somit ist gewährleistet, dass Du immer allein (aus Sicht der SP) auf der Tabelle rumwerkelst. Allerdings mußt Du dann auf dynamic
SQL zurückgreifen. Wenn Dir das neu ist, dann auch dazu ein kleines Beispiel. Viel Spass!
Beispiel:
SQL-Code:
-- erzeugt eindeutigen Tabellennamen
CREATE FUNCTION GetTmpTableName( @Tabelle sysname)
RETURNS
varchar(2000)
AS
BEGIN
DECLARE @TmpTable
varchar(2000) OUTPUT
, @i
int
SET @i = 0
SET @TmpTable = '
##Tmp_'+@Tabelle
WHILE object_id('
tempdb..'+@TmpTable, '
U')
is not null BEGIN
SET @i = @i+1
SET @TmpTable = '
##Tmp_'+@Tabelle+
convert(
varchar,@i)
END
RETURN (@TmpTable)
END
-- DemoSP für Dynamic SQL
CREATE PROCEDURE DoSomething
AS
BEGIN
DECLARE @
SQL nvarchar(4000)
-- Statements für dynSQL
, @PARA
nvarchar(4000)
-- Variablen für dynSQL
, @TMP_TABELLE
varchar(255)
-- Temporäre Tabelle
, @DerCursor
Cursor -- dynamischer Cursor
, @DeineFeldEinsVariable
int -- irgendwas halt
-- Aufruf der obigen Funktion, um eindeutigen Tabellennamen zu erhalten
SET @TMP_TABELLE = GetTmpTableName('
MeineTmpTabelle')
-- Statement, um diese Tabelle zu erzeugen und mit Werten zu füllen
SET @
SQL = '
INSERT INTO '+@TMP_TABELLE+'
SELECT FeldEins,* FROM BlaBla'
-- ausführen
EXEC @
SQL
--Statement, um einen dynamischen Cursor für diese Tabelle anzulegen
SET @
SQL = '
SET @DerCursor = CURSOR FOR
SELECT FeldEins
FROM '+ @TMP_TABELLE+ '
; Open @DerCursor'
--Parameter für aufruf von sp_executesql erzeugen
SET @PARA = '
@DerCursor CURSOR OUTPUT'
-- dynSQL ausführen
EXEC sp_executesql @
SQL, @PARA, @DerCursor
-- mit dem dynamischen Cursor arbeiten
FETCH NEXT
FROM @DerCursor
into @DeineFeldEinsVariable
WHILE @@FETCH_STATUS = 0
BEGIN
-- Mach was
FETCH NEXT
FROM @DerCursor
into @DeineFeldEinsVariable
END
CLOSE @DerCursor
DEALLOCATE @DerCursor
-- einfache Abfrage auf die dyn. erzeugte temp. Tabelle
SET @
SQL = '
SELECT * FROM '@TMP_TABELLE'
EXEC @SQL
-- Tabelle löschen
SET @SQL = '
DROP TABLE '
+@TMP_TABELLE
EXEC @SQL
END
Gruß