Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:将查询结果存储到变量中_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

SQL Server:将查询结果存储到变量中

SQL Server:将查询结果存储到变量中,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我试图将每个人的查询结果连接到一个变量中。 光标从#temp表中提取列名,并从PersonTable中提取数据 例如:对于PID=1(FName:John LName:Hill HomeCountry=US HomeState=CH) 123johnhillsch Person Table: pid FName LName HomeCity HomeState 1 Pascal E New York NY 2 Steve F New

我试图将每个人的查询结果连接到一个变量中。 光标从#temp表中提取列名,并从PersonTable中提取数据

例如:对于PID=1(FName:John LName:Hill HomeCountry=US HomeState=CH) 123johnhillsch

  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

在SQL Server 2012+中,为什么不这样做

SELECT EID, CONCAT(EID, FName, LName, HomeCountry, HomeState) AS ConcatString, CreateDate
FROM Person
在SQLServer2008R2及以下版本中,必须

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

如果你想返回每个用户的结果,你可以参数化它,然后从源代码中单独发送EID,或者你可以使用光标…如果你没有其他选择的话。如果要返回整个数据集,可以直接使用该数据集中的数据

要连接的列是否都在同一个表中?或者它们是按您在示例中显示的方式逐行存储的吗?您可以发布示例数据和人员的预期结果吗table@RyanWilson:是,但针对每个员工按行显示。例如:输出表包含EID、Concat(EID、FName、LName、HomeState、HomeCity),CreatedOn@SQLLearner我想你已经得到了下面的答案。@scsimon:添加了Person&Output Table很好的答案。确保在使用varchar时始终指定大小。默认值可以根据使用情况而更改。就像所有事情一样,直截了当总是更好。是的,我在那件事上很懒。我继续,只是将其更改为bigint允许的最大长度。