2010-09-27 7 views
2

J'ai une table qui contient environ 60 colonnes et si j'écris une requête de sélection dans l'analyseur de requête pour obtenir une rangée il l'affiche et je dois faire défiler pour montrer des données.
Comment puis-je obtenir une rangée dans laquelle il montre que 60 rangée, chaque rangée contient 2 colonnes un pour nom de colonne et d'autres pour la valeur
par exemple Select * from table where id = 1 en défaut, il apparaît commeComment afficher une ligne dans les lignes où chaque ligne contient le nom de la colonne et l'autre la valeur?

ID Col1 Col2 Col3 Col4 Col5 ...... Col60 
1 v1 v2 v3 v4 v5 ...... v60 

Je veux qu'il soit présenté comme

ID 1 
Col1 v1 
Col2 v2 
Col3 v3 
... 
Col60 v60 

Répondre

3

Le dessous Stocké Procédure do W chapeau dont vous avez besoin

CREATE PROCEDURE [dbo].[Rotat] 
    -- Add the parameters for the stored procedure here 
    @Where nvarchar(max), 
    @tableName nvarchar(max) 
AS 
BEGIN 

Declare @SqlQuery nvarchar(max),@ColumnName nvarchar(255) 
DECLARE @TempTable TABLE 
( 
     ID int IDENTITY(1,1) , 
     ColumnName nvarchar(255), 
     ColumnValue ntext 
) 


INSERT INTO @TempTable (ColumnName) 
    SELECT  column_name 
    FROM information_schema.columns 
    WHERE table_name = @tableName 

Declare @index int 
Set @index = 1; 

Declare @Count int 
Select @Count = Count(ID) from @TempTable 
declare @columnValue nvarchar(255) 
declare @paraDef nvarchar(max) 
declare @string nvarchar(max) 

WHILE @index <= @Count 
BEGIN 
    Select @ColumnName = ColumnName from @TempTable where id = @index 
    set @string ='select @ret= cast('+ @ColumnName + ' AS nvarchar(255)) 
     from '[email protected]+' WHERE ' + @Where 

    set @paraDef=N'@ret nvarchar(255) output' 

    EXECUTE sp_executesql @string, @paraDef,@[email protected] output 

    UPDATE @TempTable 
    SET  ColumnValue = @columnValue 
    WHERE ID [email protected] 

    Set @index = @index + 1 
END 

Select * from @TempTable 

END 

simplement appeler un nom de table passe et votre état qui renverra une ligne par exemple

EXEC [dbo].[Rotat] 
     @Where = 'UserID = 123456', 
     @tableName = 'Users' 
+0

J'ai essayé et obtenu ce que je veux, mais est-ce la meilleure solution? – Hotmoil

0

Si vous voulez une technique très rapide juste pour l'affichage des données transposés (comme votre question semble suggérer), essayez de copier et coller la sortie de la grille de résultats dans Excel, puis copiez les données Excel et utilisez Collage spécial pour transposer la sortie.

+0

Je le veux publich dans lequel je peux l'utiliser pour n'importe quelle table – Hotmoil

Questions connexes