2016-04-15 14 views
0

Ich stecke auf einen Fehler in MS SQL Server. Ich mache eine gespeicherte Prozedur, in der ich einen Wert deklariere, ich setze es als Select-Anweisung und führe es aus. Dann möchte ich es später in der gleichen gespeicherten Prozedur verwenden, aber es sieht es immer noch als Select-Anweisung und nicht als Ergebnis der Anweisung.Einen Wert angeben und ausführen, kann nicht in derselben gespeicherten Prozedur verwendet werden?

Deklarieren:

Declare @functie varchar(255); 
Set @functie = 'Select Functie From Medewerker m, Logins l where m.mdwnr = l.mdwnr And gebruikersnaam = ''' + @GebruikersNaam + '''' 
EXECUTE(@functie) 
Print @functie 

es danach Vergleich (nicht funktioniert):

If '+ @functie + ' = ''Administrator'' 
Print ' + @functie + ' 

Die Drucke zum Debuggen verwendet werden und sind nicht erforderlich.

Wie kann ich das beheben?

+0

Das 'if' Aussage schlichtweg falsch ist -' ‚‘ Administrator''' isn 't eine gültige Zeichenfolge, und die erste Zeichenfolge ist eine hartcodierte' '+ @functie +' '. Vielleicht sollten Sie die Tippfehler korrigieren und Code versuchen, der tatsächlich kompiliert? Wolltest du 'if @functie = 'Administrator' verwenden? –

Antwort

2

Sie brauchen hier nicht dynamic sql. Hier ist Ihre Abfrage, die den Wert der Variablen festlegt.

Declare @functie varchar(255); 
Select @functie = Functie 
From Medewerker m 
join Logins l on m.mdwnr = l.mdwnr 
    And gebruikersnaam = @GebruikersNaam 

Außerdem sollten Sie in die Gewohnheit der Verwendung von ANSI-92-Stil verbindet anstelle der aus Daten Komma Liste der Tabellen getrennt. Die "neuere" Join-Syntax ist jetzt fast 30 Jahre alt. http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins.aspx

0

Sie können Daten von EXEC nur an die Tabelle senden, dann können Sie diese Informationen je nach Ihren Anforderungen analysieren. Hier ist möglich Beispiel dafür:

DECLARE @sql nvarchar(255) = 'Select ''test''' 
DECLARE @result TABLE (functie nvarchar(100)) 
DECLARE @functie nvarchar(100) 
INSERT INTO @result EXECUTE(@sql) 
SET @functie = (SELECT TOP(1) functie FROM @result) 
PRINT(@functie) 

jedoch vorherigen Kommentar ist perfekt, die Sie nicht brauchen dynamische SQL für diesen Vorgang, und parametrisierte Abfrage kann Ihren Esel bei SQL Injection speichern (was in Ihrem Code möglich aussieht).

0

Die vorherige Antwort mein Problem lösen - ich wollte auch feststellen, dass Ihr Vergleichscode falsch ist - die Verwendung von zwei einfachen Anführungszeichen in einer Zeile in ein einzelnes Anführungszeichen aufgelöst (anstatt als Texttrennzeichen behandelt).

Wenn Sie einfache Anführungszeichen zurück als Teil Ihrer Ergebnis bekommen werden, dann sollte der Code wie folgt aussehen:

If '' + @functie + '' = '''Administrator''' Print @functie