Initialisieren Sie Eine Variable Mit Dem Output An Eine Gespeicherte Prozedur In MS SQL Server
Erstellt habe ich die folgende gespeicherte Prozedur..
CREATE PROCEDURE [dbo].[UDSPRBHPRIMBUSTYPESTARTUP]
(
@CODE CHAR(5)
, @DESC VARCHAR(255) OUTPUT
)
AS
DECLARE @SERVERNAME nvarchar(30)
DECLARE @DBASE nvarchar(30)
DECLARE @SQL nvarchar(2000)
SET @SERVERNAME =
Convert(nvarchar,
(SELECT spData FROM dbSpecificData WHERE spLookup = 'CMSSERVER'))
SET @DBASE =
Convert(nvarchar,
(SELECT spData FROM dbSpecificData WHERE spLookup = 'CMSDBNAME'))
SET @SQL =
'SELECT clnt_cat_desc FROM ' + @SERVERNAME +
'.' + @DBASE + '.dbo.hbl_clnt_cat WHERE inactive = ''N''
AND clnt_cat_code = ''' + @CODE + ''''
EXECUTE sp_executeSQL @SQL
RETURN
Dieses Verfahren wird in vielen verschiedenen Datenbanken und vielen verschiedenen Servern und ist so geschrieben, wie Sie dynamische SQL die Wartung zu vereinfachen. Das Verfahren läuft auch auf einem anderen server als die, die die Prozedur verweist.
Möchte ich die Ausgabe dieses Verfahren als einen Wert in einer Tabelle...
DECLARE @clid BIGINT
DECLARE @fileid BIGINT
DECLARE @myCode CHAR(5)
DECLARE @myDesc VARCHAR(255)
DECLARE @@tempDesc VARCHAR(255)
SET @clid = 1831400022
SET @fileid = 2072551358
SET @myCode =
(SELECT _clientPrimBusinessType FROM udbhextclient WHERE clid = @clid)
SET @myDesc =
EXEC UDSPRBHPRIMBUSTYPESTARTUP @CODE = @myCode, @DESC = @@tempDesc OUTPUT
----------------------------------------------------------------------------
SELECT
a.clid
, b.fileid
, c.usrfullname AS ClientPartner
, e.usrfullname AS ClientFeeEarner
, @myDesc AS ClientPrimaryBusinessType
FROM
dbclient a
INNER JOIN
dbFile b
ON
a.clid = b.clid
INNER JOIN
dbuser c
ON
a.feeusrid = c.usrid
INNER JOIN
udbhextclient d
ON
a.clid = d.clid
INNER JOIN
dbuser e
ON
d._ClientFeeEarner = e.usrid
WHERE
a.clid = @clid
AND b.fileid = @fileid
Ich weiß, das ist die falsche syntax, aber Sie können sehen, was ich bin versucht, dies zu erreichen, ohne Rückgriff auf temporäre Tabellen, da dies bedeuten würde Wartung über 30 verschiedenen Servern mit 3 zu 5 Datenbanken auf jedem.
Smink - habe Versucht, Ihre Lösung und erhielt die folgenden Ergebnisse...
Das Software-Paket hat viele updates. Der update-Vorgang wird alles gelöscht, es sei denn, es folgt der Namenskonvention... UD - Benutzer Definiert, SPR - Stored-Proc, BH - Boodle Hatfield(Chef),PRIM - Primär-BUS - Geschäfts-ART - Geben Sie START - Start-Up Einige haben sogar einen max char Länge von 15
Abgeschlossen Antwort unten. Werfen Sie einen Blick.
Bertrand :ich habe Ihre Nachricht., Ich werde es prüfen.
Bertrand : ich Danke Ihnen so sehr für Ihre Aufmerksamkeit. Großer Meister, diese änderung erhöht die Lesbarkeit des Codes. Natürlich ist dies meine Meinung. Jedoch, ich respektiere deine Meinung. Ich bin versucht, darauf Ihre Aufmerksamkeit.
InformationsquelleAutor Lord Future | 2008-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie die Zeile:
zu
Haben, und Sie haben verpasst die Zuordnung
@DESC
in der gespeicherten Prozedur.Sollten Sie dann verwenden
@tempDesc
im nächsten Schritt wählen Sie:Auch Ihre gespeicherte Prozedur SQL-Injektion um:
(Update: Behoben SQL-Injection-Probleme.)
Sie sollten die Verwendung von @tempDesc in der select-und @myDesc. Siehe Antwort bearbeitet.
Smink - ich habe versucht, Ihre Lösung und erhielt die folgenden Ergebnisse... Bitte sehen Sie sich die embedded-image.
Sie sind nicht die Zuordnung @DESC innen [dbo].[UDSPRBHPRIMBUSTYPESTARTUP] gespeicherte Prozedur.
Ich habe aktualisiert die Antwort auf diese aufzunehmen. Schauen Sie es oben.
InformationsquelleAutor Jorge Ferreira
Pheww, ich war verrückt auf, wie dies zu tun, ich brauchte, um ein Ergebnis von einer gespeicherten Prozedur Teil einer aktuellen Abfrage und ich war mit die härteste Zeit, dies zu tun. Was ich Tat, war wrap-Verfahren mit einer Funktion und dann wieder den Wert und das war es.
InformationsquelleAutor Miami Web Design
Können Sie eine Funktion erstellen (anstatt eine Prozedur), die eine Tabelle zurückgibt.
InformationsquelleAutor tpower
Wenn Sie nicht möchten, berühren Sie mit Ihrem VERFAHREN können Sie eine FUNKTION erstellen, wickelt es, und verwenden Sie die wrapper-Funktion in Abfragen.
InformationsquelleAutor Tomalak