数据库中为了实现表格数据的*设置,我们经常设计纵表,或者列定义的表(如下KeyValue),定义一个列超级多的表中每个字段的意义。
但是在设计时简单的东西却很容易被人们忘记,如下一个简单但是很松散的列表查询。
--CREATE TABLE KeyValue
--(
--[key] NVARCHAR(50) ,
--[value] NVARCHAR(50)
--) CREATE TABLE TableNumber
(
Name NVARCHAR(50),
Filed1 NVARCHAR(50),
Filed2 NVARCHAR(50),
Filed3 NVARCHAR(50),
Filed4 NVARCHAR(50),
Filed5 NVARCHAR(50),
)
INSERT INTO dbo.TableNumber
( Name ,
Filed1 ,
Filed2 ,
Filed3 ,
Filed4 ,
Filed5
)
VALUES ( N'张三2' , -- Name - nvarchar(50)
N'中国2' , -- Filed1 - nvarchar(50)
N'河北2' , -- Filed2 - nvarchar(50)
N'唐山2' , -- Filed3 - nvarchar(50)
N'' , -- Filed4 - nvarchar(50)
N'' -- Filed5 - nvarchar(50)
) INSERT INTO KeyValue VALUES('Filed1','国家')
INSERT INTO KeyValue VALUES('Filed2','省')
INSERT INTO KeyValue VALUES('Filed3','市') DECLARE @msg NVARCHAR(max)=''
SELECT @msg=@msg+','+[key]+' as '+value FROM KeyValue SET @msg='Name as 名称'+@msg; DECLARE @sql NVARCHAR(max);
SET @sql='select '+@msg +' from TableNumber' EXEC( @sql)
这种设计可用于自定义列表查询,EXCEL导出,很方便,使用起来比在C#中写更便捷,不过缺点就是依赖数据库。