![]() |
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:
Ist umgebauter Code aus Beispieldatenbank "Nordwind".
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 Die Tabelle wird gelöscht und angelegt, es werden jedoch keine Datensätze zurückgegeben. Hat da jemand eine Lösung :?: |
Re: SELECT in StoredProcedure gibt keine Datensätze zurück
[quote="Ferber"]
SQL-Code:
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...
if exists (select * from TestTable) drop table "dbo"."TestTable"
SQL-Code:
... 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.
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[TestTable]') and OBJECTPROPERTY(id, N'TestTable') = 1)
drop table [dbo].[TestTable] |
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: |
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 ? |
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.
|
Re: SELECT in StoredProcedure gibt keine Datensätze zurück
Zitat:
Habe gerade "SQL for Dummies" von Allen G. Taylor gefunden, dürfte auch ganz brauchbar sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz