SQL动态列查询

Posted 圣叹&北京

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL动态列查询相关的知识,希望对你有一定的参考价值。

数据库中为了实现表格数据的自由设置,我们经常设计纵表,或者列定义的表(如下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#中写更便捷,不过缺点就是依赖数据库。

以上是关于SQL动态列查询的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis高级特性

SQL:在 Chartio 中动态地将列转换为行

代码中的动态 SQL 查询可能吗?

SQL动态列查询

SQL Server:从查询返回的动态列

SQL查询动态列的方法