2017-05-11 2 views
1

Hey alle hier ist mein Code, den ich zur Zeit in einer gespeicherten proceedure haben:TSQL in einer SELECT-Anweisung @varible mit

DECLARE @SQL NVARCHAR(MAX); 
[more code here.....] 

SET @SQL = @ParameterSQL; 
[more code here.....] 

SET @SQL = 
    'SELECT 
     CONCAT(
       OBJECT_NAME(@@PROCID), 
       LEFT(modify_date, 11), 
       '' ('', 
       DATEDIFF(day, LEFT(modify_date, 11), GETDATE()), 
       '' days ago)'' 
      ) AS CurrentVersion, 
     CONCAT(
       ''@val3'', 
       '''' 
      ) AS calledQuery 
     FROM 
     sys.objects 
     WHERE 
     type = ''P'' 
     AND 
     name = ''' + @ver + ''''; 

EXECUTE sp_executesql @SQL; 

kein Fehler, aber in der Ausgabe zeigt es gerade dies:

_______________________________________ 
|CurrentVersion   |calledQuery| 
|-------------------------|-----------| 
|May 11 2017 (0 days ago) |@val3  | 

Also sollte @ val3 eine Abfrage sein, die gerade ausgeführt wurde.

Was fehlt mir?

Antwort

3

sollten Sie Parameter verwenden:

EXECUTE sp_executesql @SQL, N'@val3 nvarchar(max)', @val3 = @val3; 

Ich weiß nicht, was die genaue Definition oder den Namen des @val3, so dass Sie die oben für die Ist-Größe ändern müssen können Sie verwenden, und seine Art.

Und wahrscheinlich möchten Sie nicht die Anführungszeichen um @val3 in der Abfrage. In der Tat, ich glaube nicht, dass Sie die concat() überhaupt wollen: