2017-05-11 143 views
1

嘿,這裏是我的代碼,我現在有一個存儲Proceedure:TSQL SELECT語句具有@varible

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; 

沒有錯誤,但在輸出只是顯示了這一點:

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

因此,@ val3應該是剛纔運行的查詢。

我錯過了什麼?

回答

3

你應該使用參數:

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

我不知道是什麼@val3的確切定義或名稱,所以你可能需要修改上面您所使用的實際變量,它的類型。

而且,您可能不希望在查詢中出現@val3左右的雙引號。事實上,我認爲你根本不需要concat()