2016-08-04 28 views
1

Angenommen, ich habe eine folgende gespeicherte Prozedur:SQL Server gespeicherte Prozedur: Einstellung Standardwert für Eingabeparameter obwohl Abfrageausführungs

CREATE PROCEDURE test 
    @my_var varbinary 
AS 
    SELECT @my_var as my_var 

Allerdings mag ich es so modifizieren, dass @my_var einen Standardwert hat. Ich weiß nicht, was das für ein Wert ist, aber ich weiß, wo ich es in der Datenbank finde.

Etwas wie:

declare @var int 
SELECT @var = my_variable from my_table where something = 'what I need' 
GO 

CREATE PROCEDURE test 
    @my_var varbinary = @var 
AS 
    SELECT @my_var as my_var 

schlägt jedoch fehl, dies. Es scheint, dass @var aus dem Rahmen fällt.

Ist es möglich, etwas in dieser Art zu tun?

Vielen Dank!

+0

Wird sich dieser Wert jemals ändern, oder wird er während der gesamten Lebensdauer unverändert bleiben? die gespeicherte Prozedur? –

+0

Es kann, aber ich möchte nur die Abfrage nur einmal ausführen, greifen Sie diesen Wert und legen Sie es als Standard in den SP. Mit anderen Worten, die Abfrage gibt nicht unbedingt den gleichen Wert von jetzt bis zum Ende der Zeiten zurück, aber ich interessiere mich nur für den Wert, den ich mit dieser Abfrage in diesem Moment ergreife, wenn ich den SP erstelle. Aus diesem Grund ist es leider keine Option, den Standardwert auf NULL zu setzen und die if-Prüfung innerhalb des SP durchzuführen und eine Abfrage von dort aufzurufen. – doubleOK

+0

Sie wählen _inside_ den proc, direkt nach 'AS' und setzen den Wert von' @ my_var' –

Antwort

2

Um einen Wert zur Laufzeit zu verwenden:

CREATE PROCEDURE test 
    @my_var varbinary = NULL 
AS 
BEGIN 
IF @my_var IS NULL 
    SELECT @my_var = my_variable from my_table where something = 'what I need' 

    SELECT @my_var as my_var 
END 

Um einen Wert zum Zeitpunkt der Erstellung zu verwenden, bauen eine CREATE PROC Zeichenfolge und es

declare @var int 
declare @SQL VARCHAR(4000) 

SELECT @var = id from sysobjects where id =3 



SET @SQL = 'CREATE PROCEDURE test @my_var varbinary = ' + CAST(@var AS VARCHAR(20)) + ' 
AS 
    SELECT @my_var as my_var' 

EXEC(@SQL) 

ausführen Wie ich .. erwähnt, wenn Sie sind das einmal erschaffen, warum sollte es kompliziert sein? Wenn Sie es viele Male erstellen, sollten Sie es zur Laufzeit tun. Es könnte eine Aufforderung dazu geben, dies zu tun, wenn Sie in vielen Datenbanken bereitstellen, aber in diesem Fall sollten Sie dies in ein Datenbankprojekt einbetten.

+0

Wird die 1. Select-Abfrage nur einmal ausgeführt, wenn die gespeicherte Prozedur erstellt wird, oder wird sie jedes Mal ausgeführt, wenn sie ausgeführt wird namens? Vielen Dank! – doubleOK

+0

jedes Mal. Sind Sie besorgt, dass sich der Wert ändern wird oder sind Sie besorgt über die Leistung? –

+0

Ich mache mir keine Sorgen um die Leistung. Ich bin besorgt, dass der Wert anders sein könnte. Gibt es einen Weg zu laufen ist nur einmal und hart Code diesen Wert in den SP? – doubleOK