2017-05-02 5 views
0

Ich weiß, es gibt eine Menge Fragen wie diese, aber ich habe fast alle der Lösung versucht, aber immer noch nicht bekommen, dass ein Stück Code zu arbeiten :(Hier ist was ich ist zu tun -. ich versuche, die Anzahl der Zeilen in einer Tabelle zu finden, so dass ich, dass als Gegen Schleife verwenden kann und löschen von ZeilenKonvertierung fehlgeschlagen beim Konvertieren varchar in INT

@rc ist INT, @tbname ist varchar (500) und @id INT ist auch

Dies ist meine Frage:.

set @rc='select count(*) from dbo.[' + @tbname + '] where id = ' + @id 

Ich habe versucht, auch diese:

set @rc='select cast(count(*) as varchar) from dbo.[' + @tbname + '] where id = ' + @id 

und

set @rc='select count(*) from dbo.[' + @tbname + '] where id = ' + cast(@id as varchar) 

Und ein paar mehr Permutation von hier abgegebenen Stellen auch und da. Ich habe auch versucht, die Deklaration von @rc als varchar zu ändern, immer noch den gleichen Fehler.

+2

Sie erwarten, dass nur * Zuweisung * a * string * auf eine Variable die Zeichenfolge verursachen sollte als eine Abfrage in Betracht gezogen werden und * * ausgeführt? Das würde zu einer bemerkenswert überraschenden Sprache führen. –

+0

Dies ist die Methode, die Sie verwenden müssen. http://stackoverflow.com/questions/803211/how-to-get-sp-executesql-result-into-a-variable Versuchen Sie es und posten Sie alle Fragen zurück –

+0

Sorry, ich habe es versäumt hinzuzufügen - ich drucke @rc in der nächste Zeile. – mathB

Antwort

1

Verwenden Sp_executesql in diesem Fall

DECLARE @retval int 
    DECLARE @sSQL nvarchar(500); 
    DECLARE @ParmDefinition nvarchar(500); 

    DECLARE @rc   INT 
      ,@str  NVARCHAR(MAX) 
      ,@tbname NVARCHAR(500) = 'Table1' 
      ,@id  int 

    set @str='select @rcOut = count(*) from dbo.[' + @tbname + '] where id = ' + CAST(@id as NVARCHAR) 


    EXEC sp_executesql @str, N'@rcOut int OUTPUT',@rcOut = @rc OUTPUT; 

    SELECT @rc; 
+0

Danke. Vor einer Stunde gab es eine andere Antwort, etwas Ähnliches konnte ich verwenden. Nicht sicher, warum das gelöscht wurde. – mathB

+1

Dies ist die richtige Methode in diesem Szenario, Sie müssen nicht erstellen Temp. Tabelle. – SHD

Verwandte Themen