我想使用在动态SQL中声明的动态变量

时间:2017-02-20 10:50:38

标签: sql sql-server

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

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

没有为@i

生成价值

我想将此代码放入while循环中,因为我想访问ms1ms10

3 个答案:

答案 0 :(得分:2)

使用支持输出参数的sp_executesql

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

答案 1 :(得分:2)

是的,你可以使用,为此你需要像这样使用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

答案 2 :(得分: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