Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SELECT in StoredProcedure gibt keine Datensätze zurück (https://www.delphipraxis.net/61139-select-storedprocedure-gibt-keine-datensaetze-zurueck.html)

Ferber 17. Jan 2006 13:55

Datenbank: MSDE • Zugriff über: ADO

SELECT in StoredProcedure gibt keine Datensätze zurück
 
Warum gibt SELECT in StoredProcedure keine Datensätze zurück ??? :cry:
SQL-Code:
Create Procedure Test2
As
if exists (select * from TestTable) drop table "dbo"."TestTable"

CREATE TABLE "TestTable"
  ("Nummer" "int" NOT NULL ,
   "Datum" dateTime ,
   "Name" nvarchar (20)
    CONSTRAINT "PK_Nummer" PRIMARY KEY CLUSTERED ("Nummer")
   )

CREATE INDEX "IX_Name" ON "dbo"."TestTable"("Name")

insert into dbo.TestTable ("Nummer", "Datum", "Name") VALUES (60100, GetDate(), 'Hugo 1')
insert into dbo.TestTable ("Nummer", "Datum", "Name") VALUES (60101, GetDate(), 'Hugo 2')

select * from TestTable
Ist umgebauter Code aus Beispieldatenbank "Nordwind".
Die Tabelle wird gelöscht und angelegt, es werden jedoch keine Datensätze zurückgegeben.
Hat da jemand eine Lösung :?:

alzaimar 17. Jan 2006 14:21

Re: SELECT in StoredProcedure gibt keine Datensätze zurück
 
[quote="Ferber"]
SQL-Code:
if exists (select * from TestTable) drop table "dbo"."TestTable"
Klappt doch gar nicht, wenn TestTable nicht existiert. Dann wird eine Exception ausgelöst und der Rest der SP wird gar nicht mehr ausgeführt. Das hier klappt zwar...
SQL-Code:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestTable]') and OBJECTPROPERTY(id, N'TestTable') = 1)
drop table [dbo].[TestTable]
... aber warum verwendest Du nicht einfach eine temporäre Tabelle ("#Table"), die Du einfach am der SP wieder löscht? Diese temporären Tabellen sind immer nur in dem 'Batch' gültig, indem sie angelegt wurden.

jensw_2000 17. Jan 2006 14:25

Re: SELECT in StoredProcedure gibt keine Datensätze zurück
 
Die Ausführung deiner SP ist vermutlich immer beim CREATE TABLE abgebrochen, weil das Löschen der Tabelle so nicht funktioniert.

Hier der funktionierende Code.
Ich würde die SP aber an deiner Stelle noch auf temporäre Tabellen umstellen.
Zudem solltest du beim binm Feld "Name" wenn möglich den Typ VARCHAR anstatt NVARCHAR verwenden.
Mit UniCode-Feldern klaust du dir unnötig Performance.

SQL-Code:
CREATE Procedure Test2
AS
BEGIN

SET NOCOUNT ON

-- Testtable löschen, falls vorhanden
IF EXISTS (SELECT name FROM sysobjects WHERE name = 'TestTable' AND type = 'U')
BEGIN
  DROP TABLE [TestTable]
END

-- Testtable neu erstellen
CREATE TABLE [TestTable]
  ([Nummer] INT NOT NULL ,
   [Datum] DATETIME ,
   [Name]  NVARCHAR(20)
   CONSTRAINT [PK_Nummer] PRIMARY KEY CLUSTERED ([Nummer])
  )
-- Index auf Testtable erstellen
CREATE INDEX "IX_Name" ON [TestTable] ([Name])


-- Datensätze einfügen
insert into dbo.TestTable ("Nummer", "Datum", "Name") VALUES (60100, GetDate(), 'Hugo 1')
insert into dbo.TestTable ("Nummer", "Datum", "Name") VALUES (60101, GetDate(), 'Hugo 2')

SET NOCOUNT OFF

-- Datensätze ausgeben
select * from TestTable

END


Schöne Grüße,
Jens
:hi:

Ferber 17. Jan 2006 15:08

Re: SELECT in StoredProcedure gibt keine Datensätze zurück
 
TXH @jensw_2000 :-D : Ja das klappt wunderbar !
Temporäre Tabellen ?! :pale: Werd' mal gleich suchen ob ich darüber was finde.
THX @alzaimar :-D
Gibt's irgendwo Tutorials wo sowas drinsteht ? Oder ein gutes Buch mit mind 1000 Seiten ?

alzaimar 18. Jan 2006 11:43

Re: SELECT in StoredProcedure gibt keine Datensätze zurück
 
Das Buch zum Server: "Inside SQL-Server 2000 von Soukup und Delaney", ein Muss für jeden ernsthaften MSSQL-Programmierer.

Ferber 18. Jan 2006 12:52

Re: SELECT in StoredProcedure gibt keine Datensätze zurück
 
Zitat:

Zitat von alzaimar
Das Buch zum Server: "Inside SQL-Server 2000 von Soukup und Delaney", ein Muss für jeden ernsthaften MSSQL-Programmierer.

THX, werd ich mir besorgen. :hi:
Habe gerade "SQL for Dummies" von Allen G. Taylor gefunden, dürfte auch ganz brauchbar sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz