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循环中,因为我想访问ms1
到ms10
答案 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