SQL Server: сохранение результата запроса в переменную - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь объединить результат запроса для каждого человека в переменную. Курсор Извлечь имя столбца из таблицы #temp и извлечь данные из PersonTable

Например: для PID = 1 (FName: John LName: Hill HomeCountry = US HomeState = CH) 123JohnHillUSCH

  Person Table:

pid FName   LName   HomeCity    HomeState
1   Pascal    E    New York      NY
2   Steve     F    New York      NY

CREATE table #Temp
    ([Id] int,  [ColumnName] varchar(13))
;

INSERT INTO #Temp
    ([Id],[ColumnName])
VALUES
    (1,  'EID'),
    (2,  'FName'),
    (3,  'LName'),
    (4,  'HomeCountry'),
    (5,  'HomeState')
;

SELECT * FROM #Temp



SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
ALTER  PROCEDURE [dbo].[up_Conv_GenerateResultsFromMappingTable]
@Param1 VARCHAR(30)
AS
SET NOCOUNT ON

DECLARE @ColName VARCHAR(100);
DECLARE @Result VARCHAR(MAX)

DECLARE @Cur as CURSOR;

SET @Cur = CURSOR FOR
SELECT columnName FROM #Temp

OPEN @Cur;
FETCH NEXT FROM @Cur INTO @ColName;

WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @query nvarchar(MAX)
PRINT @Param1;
SET @Query='SELECT '+@ColName+' FROM dbo.PERSON where PID='+@Param1+''  
PRINT @Query 
EXECUTE sp_executesql @Query
                  ,  N'@Param1 varchar(30)', 
                   @Param1 


FETCH NEXT FROM @Cur INTO @ColName;
END

CLOSE @Cur;
DEALLOCATE @Cur;

Ожидаемый результат

1,1PascalENewYorkNY
2,2SteveFNewYorkNY

1 Ответ

0 голосов
/ 30 августа 2018

В SQL Server 2012+, почему бы просто не сделать

SELECT EID, CONCAT(EID, FName, LName, HomeCountry, HomeState) AS ConcatString, CreateDate
FROM Person

В SQL Server 2008R2 и ниже оно должно быть

SELECT EID, CAST(EID AS VARCHAR(20) + FName + LName + HomeCountry + HomeState AS ConcatString, CreateDate
FROM Person

И если вы хотите вернуть результаты для каждого пользователя, вы можете параметризовать его и отправить EID индивидуально из источника, или вы можете использовать курсор ... если у вас абсолютно другого варианта нет. Если вы хотите вернуть весь набор данных, вы можете просто использовать данные прямо из этого набора данных.

...