0
Ich habe eine gespeicherte Prozedur, die eine SELECT-Anweisung ausgibt, wie Sie unten sehen:Wie gespeicherte Prozedur geschrieben wird, die SELECT-Anweisung als Eingabeparameter übergeben?
select case when count(*) > 10 then ''A1'' else ''B1'' end as id, name, address from database.dbo.student
Jetzt habe ich eine gespeicherte Prozedur schreiben möchten, die eine solche select
Anweisung als String-Eingang nimmt und alle oben genannten Ausgänge zurück. Ich bin mir nicht sicher, wo ich die Ausgangsvariablen zuweisen soll.
ALTER PROCEDURE dbo.selectAttributes
@select_statement Nvarchar(MAX),
@id Nvarchar(255) OUT,
@name nvarchar(255) OUT,
@address nvarchar(255) OUT
AS
BEGIN
DECLARE @query nvarchar(MAX)
SET @query = @select_statement
EXEC sp_executesql @query,
N'@select_statement Nvarchar(MAX),
@idOUT Nvarchar(255) OUTPUT,
@nameOUT nvarchar(255) OUTPUT,
@addressOUT nvarchar(255) OUTPUT',
@select_statement, @id OUTPUT, @name OUTPUT, @address OUTPUT
END
Was passiert, wenn die Anweisung 'select' einen Alias enthält? Zum Beispiel, wählen Sie die Groß-/Kleinschreibung aus, wenn die Anzahl (*)> 10, dann '' A1 '' else '' B1 '' als ID, Name, Adresse aus der Datenbank.dbo.student endet. In diesem Fall gibt der Ausgabeparameter null –
@AyanabhChakraborty zurück. . . Ich denke nicht, dass diese Art von dynamischem SQL für eine übergebene Abfrage im Allgemeinen eine gute Idee ist. Aber das ist nicht das Thema Ihrer Frage. Das Thema ist, wie Sie die gespeicherte Prozedur dazu bringen, das zu tun, was Sie wollen und darauf antworten Sie. Die Argumente müssen miteinander kompatibel sein. –
Ja, ich stimme dir zu. In meiner Implementierung übergebe ich es nicht manuell. Es ist eigentlich ein komplizierter Stored-Proc mit dynamischer Tabelle, Schema und Datenbankname als Eingaben, die Berechnungen durchführen und eine select-Anweisung werfen, die ich behandeln muss, um die Spalten daraus zu machen. Ich habe gerade den ersten gespeicherten Proc so modifiziert, dass er mir etwas ausgibt, wie 'select @id = case wenn count (*)> 10 dann '' A1 '' else '' B1 '' end, ....' und es hat funktioniert. Vielen Dank! –