T-SQL добавить номер к переменной - PullRequest
0 голосов
/ 09 ноября 2011

Я не смог найти ответ на этот вопрос ...

У меня есть три переменные, и мне нужно переключаться между ними во время цикла Loop

Пример:

DECLARE  
@tableHTML  NVARCHAR(MAX),  
@email nvarchar(100),  
@text1 nvarchar(100),
@text2 nvarchar(100),
@text3 nvarchar(100),
@number_suffix nvarchar(1)
SET @text1 = 'State of orders for Morfeus'
SET @text2 = 'State of orders for Fenix'
SET @text3 = 'State of orders for Perseus'
SET @number_suffix = 1
WHILE (@number_suffix < 4)
BEGIN
    print @text(@number_suffix) /*and here is the problem */
    SET @number_suffix = (@number_suffix + 1)
END

Как мне добавить число в переменную @text, пожалуйста? Я использую MS SQL 2008

Ответы [ 3 ]

2 голосов
/ 09 ноября 2011

Хотите добавить число к имени переменной?Это невозможно.Зачем вам это нужно, возможно, решение более простое ...

Попробуйте следующее, возможно, id делает то, что вы ищете:

DECLARE @cities TABLE(id int IDENTITY(1,1), cityName varchar(100))
INSERT INTO @cities(cityName) VALUES ('Morfeus'), ('Fenix'), ('Morfeus')    
SELECT 'State of orders for ' + cityName
FROM @cities

Вывод:

State of orders for Morfeus
State of orders for Fenix
State of orders for Morfeus

Для печати номера:

SELECT '#' + CAST(id AS varchar(2)) + ' State of orders for ' + cityName
FROM @cities

Вывод:

1 State of orders for Morfeus 
2 State of orders for Fenix 
3 State of orders for Morfeus
0 голосов
/ 09 ноября 2011

Вы можете сделать это с помощью динамического SQL, но вам нужно будет повторно инициализировать все переменные.Следующее сделает это, но это колоссально плохая идея, и вы должны использовать вместо sll ответ

DECLARE  
@tableHTML  NVARCHAR(MAX),  
@email nvarchar(100),  

@number_suffix nvarchar(1),
@SQL nvarchar(max)

SET @number_suffix = 1
WHILE (@number_suffix < 4)
BEGIN
    SET @SQL = N'
    DECLARE @text1 nvarchar(100),
            @text2 nvarchar(100),
            @text3 nvarchar(100)

    SET @text1 = ' + '''' + 'State of orders for Morfeus' + ''''  +
   'SET @text2 = ' + '''' + 'State of orders for Fenix' + ''''  + 
   'SET @text3 = ' + '''' + 'State of orders for Perseus' + ''''

    +           

    'PRINT @text' + @number_suffix
    EXEC sp_executeSQL  @SQL 
    SET @number_suffix = (@number_suffix + 1)
END
0 голосов
/ 09 ноября 2011

Вопрос не совсем ясен, какова ваша конечная игра, но если я вас правильно понимаю, то что-то вроде этого должно сработать (заметьте, вам сначала нужно создать функцию разбора):

    CREATE FUNCTION [dbo].[fnParseString]
(
    @Section SMALLINT,
    @Delimiter CHAR,
    @Text VARCHAR(MAX)
)
RETURNS VARCHAR(8000)
AS

BEGIN
DECLARE @startindex NUMERIC(18,0),
     @length NUMERIC(18,0),
     @FieldPosition INT

 SET @FieldPosition = ABS(@Section) - 1
 SET @startindex = 0


 WHILE @FieldPosition != 0
 BEGIN
    SET @FieldPosition = @FieldPosition - 1
     SET @startindex = CHARINDEX(@Delimiter, @Text, @startindex + 1) 
 END     


 SET @Text = SUBSTRING(@Text, @startindex + 1, LEN(@Text) - @startindex)
 SET @Text = SUBSTRING(@Text, 0, CHARINDEX(@Delimiter, @Text))

 RETURN @Text
END
GO

DECLARE  
@tableHTML  NVARCHAR(MAX),  
@email nvarchar(100),  
@text nvarchar(100),
@number_suffix nvarchar(1)

SET @text = 'State of orders for Morfeus|State of orders for Fenix|State of orders for Perseus|'

SET @number_suffix = 1
WHILE (@number_suffix < 4)
BEGIN
    PRINT dbo.fnParseString(@number_suffix, '|', @text)

    SET @number_suffix = (@number_suffix + 1)
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...