tryDeclare @S Varchar(8000)
Select @S= ''
Select @S = ' Union All Select ''' + Name + ''' As Name, ' + Name + ' As Value From 表' From SysColumns Where ID = OBJECT_ID('表') Order By ColID
Select @S = Stuff(@S, 1, 10, '')
EXEC(@S)
Select @S= ''
Select @S = ' Union All Select ''' + Name + ''' As Name, ' + Name + ' As Value From 表' From SysColumns Where ID = OBJECT_ID('表') Order By ColID
Select @S = Stuff(@S, 1, 10, '')
EXEC(@S)
Select @S= ''
Select @S = @S + ' Union All Select ''' + Name + ''' As Name, ' + Name + ' As Value From 表' From SysColumns Where ID = OBJECT_ID('表') Order By ColID
Select @S = Stuff(@S, 1, 10, '')
EXEC(@S)
Create Table 表
(FID Varchar(10),
FNo Varchar(10),
FName Varchar(10))
Insert 表 Select '1000', '0101', '电脑'
GO
--測試
Declare @S Varchar(8000)
Select @S= ''
Select @S = @S + ' Union All Select ''' + Name + ''' As Name, ' + Name + ' As Value From 表' From SysColumns Where ID = OBJECT_ID('表') Order By ColID
Select @S = Stuff(@S, 1, 10, '')
EXEC(@S)
GO
--刪除測試環境
Drop Table 表
--結果
/*
Name Value
FID 1000
FNo 0101
FName 电脑
*/
paoluo,你最后一种方法是针对固定列的,不适合我,上一种方法到是可以
----------------其實我寫的都是一種方法,都是針對不是固定列的。我寫了測試環境,是讓你看看測試效果的。
但是也存在一种弊端,那就是我没有去很不想去破坏SysColumns这个表结构,不过分数还是给你们了哈哈,因为我想到了另外一种更好的方法,拿出来给大家参考一下,那就是自己定义一个2个表,一个是描述表的,另外一个是描述字段信息的,这样我不用去破坏SQL原有结构也可以自由发挥表设计器的强大功能,同事也可以根据个人喜好来定义表结构。
----------------這一點,你又看錯了。我的語句沒有去破壞SysColumns的表结构,而是借用這個表查詢出列名而已,對SysColumns這個表沒有任何影響。
如果我字段值为字符串,你这个语句就会报错
----------------如果都是字符類型,沒有問題的,這個寫的就是針對字符串的。但是有數值型,會報錯,需要做類型轉換。
--創建測試環境
Create Table 表
(FID Int,
FNo Varchar(10),
FName Varchar(10))
Insert 表 Select '1000', '0101', '电脑'
GO
--測試
Declare @S Varchar(8000)
Select @S= ''
Select @S = @S + ' Union All Select ''' + Name + ''' As Name, Cast(' + Name + ' As Varchar) As Value From 表' From SysColumns Where ID = OBJECT_ID('表') Order By ColID
Select @S = Stuff(@S, 1, 10, '')
EXEC(@S)
GO
--刪除測試環境
Drop Table 表
--結果
/*
Name Value
FID 1000
FNo 0101
FName 电脑
*/