2010-09-27 9 views
2

我有一個包含約60列,如果我在查詢分析器寫SELECT查詢來獲得一排它表明了它,我必須滾動顯示數據..表
我怎樣才能得到一個排它顯示爲60行,每行包含兩列一個用於列的名稱和其他爲值
例如Select * from table where id = 1在默認情況下它顯示爲行,其中每行包含列名,其餘的conatin的價值如何能顯示一排?

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

我希望它被示出爲

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

回答

3

的下面存儲程序做w ^帽子你需要

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 

只是把它的通表的名稱和你的條件,如果你只想查看調換數據的非常快的技術,將返回一行例如

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

我試圖得到我想要的東西,但它是最好的解決辦法? – Hotmoil 2010-09-28 05:20:41

0

(你的問題似乎暗示),試圖複製和粘貼從結果網格到Excel輸出,然後複製Excel中的數據,並使用選擇性粘貼轉置輸出。

+0

我希望它publich中,我可以使用它的任何表 – Hotmoil 2010-09-28 05:19:25

相關問題