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#中寫更便捷,不過缺點就是依賴數據庫。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM