2017-02-20 53 views
1
declare @sql as nvarchar(500)=''  
set @sql=' 
    declare @N4 as int = 1 
    declare @ms as nvarchar(100) = concat(''ms'', convert(nvarchar(10), @N4)) 
    select @ms 
    ' 
exec @sql 

我想輸出爲ms1我想使用動態SQL中聲明的動態變量

DECLARE @SQL AS NVARCHAR(500)='' 
SET @sql=' 
while (@i <10) 
begin 
    PRINT (''MS_''[email protected]) 
    set @[email protected]+1 
end 
' 
EXEC(@SQL) 

不是@i

創造價值,我想,我要訪問ms1ms10

+0

你使用哪個dbms? (該代碼是產品特定的。) – jarlh

+0

Sql Server 2014 –

+0

發佈您的預期輸出 – Mansoor

回答

1
Use While statement and string concatenation to get your result : 

DECLARE @StartValue INT = 1 
DECLARE @EndValue INT = 10 
DECLARE @Query VARCHAR(500) = '' 

WHILE @StartValue < @EndValue 
BEGIN 

SET @Query = @Query + 'sms_' + CAST(@StartValue AS VARCHAR) + ',' 
SET @StartValue = @StartValue + 1 

END 
SELECT Query 
+0

但我必須把這整個代碼在動態sql –

+0

如何定義開始和結束值..? – Mansoor

+0

你知道我是否打算使用裏面的動態變量varible。在我的問題 –

2

使用sp_executesql支持輸出中PARAMS

把這個代碼在while循環
DECLARE @MS VARCHAR(50) 
exec sp_executesql N'declare @N4 as int = 1; 
SELECT @MS= concat(''ms'', convert(nvarchar(10), @N4))', 
N'@MS VARCHAR(50) output', @MS output; 

SELECT @MS 
+0

感謝您的代碼 –

2

是的,你可以使用,因爲你需要你se sp_executesql是這樣的 -

Declare @sql as nvarchar(500)='', @Params NVARCHAR(500), 
@N4 Int = 1, @ms nvarchar(100) 

SET @Params = '@N4 Int, @ms nvarchar(100) OUTPUT' 

set @sql= N'SELECT @ms = concat(''ms'', convert(nvarchar(10), @N4))' 
EXEC SP_EXECUTESQL @sql, @Params, @N4 = @N4, @ms = @ms OUTPUT 

SELECT @ms 
+0

感謝您的幫助 –