sp soll nen wert liefern - wie?

MrBarcode

Erfahrenes Mitglied
MSSQL und ASP

Ich habe eine stored procedure, die überprüft, ob es in einer Tabelle eine ID Splate mit autoincrement besitzt. Die funktioniert auch soweit. Nur wenn es keine solche gibt liefert mir die stored procedure natürlich auch nix zurück.
Problem entsteht dann im asp bei ner abfrage. Da er nix hat zum vergleichen, kann er nichts anderes tun als Fehler schreien.

Also die Frage lautet: Wie ändere ich meine stored prodcedure so um, dass sie entweder immer extra noch einen wert dranhängt also ...

'uid'
'no uid'

oder, dass er 'no uid' ausgibt, wenn es keinen Wert gibt. Hab da an eine if abfrage in der procedure gedacht, aber bisher hat noch nichts funktioniert.

Da ich im Script ein recodset abfrage mit rs(0) holt er sich immer den ersten Eintrag der ersten Spalte. In beiden Fällen hätte er dann ja einen Wert, mit dem er arbeiten kann.

Ich häng auch schnell noch den Code von der procedure an:

Code:
CREATE PROCEDURE l_getuid 
@tblname varchar(255)

AS
SELECT name FROM datenbankname.dbo.syscolumns
WHERE id=(	SELECT ID FROM datenbankname.dbo.sysobjects 
		WHERE xtype='u' AND NAME=@tblname)
AND autoval <> 'NULL'
GO
 
Zuletzt bearbeitet:
Vergleich auf Error oder nicht

Wenn es mit der SP nicht klappt, warum fragst Du dann in ASP nicht ab, ob er einen Fehler bekommt oder nicht?
Bei Fehler weißt Du ja, dass er keine Spalte besitzt und machst, was auch immer Du in diesem Fall machen willst.
Und andernfalls hast Du ja ein Ergebnis, das Du weiterverarbeiten kannst.
 
error handling? puh - daran hab ich noch gar nicht gedacht :p aber simpler wärs, wenn mir meine prozedur was ausspucken tät.
Schließlich muss ich mit dem ja arbeiten. Und mein Script ist jetzt schon verschachtelt genug, da möcht ich nicht auch noch error handles in abfragen reinhauen ...

Hätt nicht gedacht, dass ein dynamisches SQL Interface so ne arbeit macht :) aber es geht schon recht gut.

mit dem was ich jetzt hab bekomm ich ja, falls es eine autoinc id gibt, den Namen der Spalte. Und solange es immer so eine Spalte gibt ist auch alles in Butter. Nur in Tabellen ohne eine solche schreit mein asp ...

Ok - hier etwas Code. Ich habe 2 Recodsets. Zuerst uid, das mir angibt welche Spalte die uniqueid hat und rs mit den Eintrgägen aus der Datenbank. (anm. strTablename wird als Variable übergeben und beinhaltet wie der Name schon sagt den namen der Tabelle)

Code:
SQLStmt = "EXEC datenbankname.dbo.l_getuid @tblname='"&strTablename&"'"
	set uid = MyConn.Execute(SQLStmt)
	SQLStmt = "SELECT * FROM datenbankname.dbo."&strTablename
	set rs = MyConn.Execute(SQLStmt)
Jetzt sage ich in einer Schleife bloß wenn der Spaltenname aus rs = der Name aus uid, dann tu was besonderes ... bzw. in meinem Fall dann lass was aus ;)

Code:
<% for each field in rs.fields
 	if uid(0)<>field.name then %>
		<input type="text" name="f_<%=field.name%>" size="20"> = <%=field.name%>
	<%end if	
   next%>

Der Fehler tritt eben dann auf, wenn meine stored procedure nix ausspuckt. Dann hängt er sich bei der abfrage if uid(0)<>field.name auf. Vielleicht hilft mir ja wer? Vielleicht kann ich das ja anders lösen?


---bloß kein Doppelposting :)

So. Problem gelöst. Vielleicht nicht sehr elegant, aber funktionell.

Hab meine sp so angepasst:
Code:
CREATE PROCEDURE l_getuid 
@tblname varchar(255)
AS
IF (SELECT COUNT(name) FROM benjamin.dbo.syscolumns
WHERE id=(	SELECT ID FROM benjamin.dbo.sysobjects 
		WHERE xtype='u' AND NAME=@tblname)
AND autoval <> 'NULL') = 1
Begin
SELECT name FROM benjamin.dbo.syscolumns
WHERE id=(	SELECT ID FROM benjamin.dbo.sysobjects 
		WHERE xtype='u' AND NAME=@tblname)
AND autoval <> 'NULL'
End
Else
SELECT COUNT(name) FROM benjamin.dbo.syscolumns
WHERE id=(	SELECT ID FROM benjamin.dbo.sysobjects 
		WHERE xtype='u' AND NAME=@tblname)
AND autoval <> 'NULL'
GO

Sie enthält jetzt eine If Abfrage. Sie Zählt mal wie viele uids es in der Tabelle gibt (count). Gibt es eine, so liest sie mir den namen der splate mit der uid aus. Gibt es keine, macht sie einfach nochmal select count blablabla.
Im Endeffekt krieg ich also entweder 0, oder den Spaltennamen zurückgeliefert, und damit kann ich im asp dann herrlich arbeiten ;)

lg
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück