2017-02-20 3 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

do u знаете, если я wnt использовать varible, который находится внутри динамической переменной. как в моем вопросе –

2

Использование sp_executesql, который поддерживает Ouput Params

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 like this -

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

Спасибо за помощь ур –

Смежные вопросы