动态字段名问题

yuzhifu1 2016-12-19 01:59:28
有两个表,字段都是动态的:

表1:
name fname
报销日期 fielddat1
凭证号 fieldstr2
附件数 fieldint3
制单人 fieldstr4
报销事由 longstr1
费用部门 liststr1
时间 listdat2
摘要 liststr3
........

表2:
fieldstr1 fieldnum1 fieldstr2 fieldnum2 fieldstr3 fieldnum3 ......
2016/12/7 0 0 11 11 0

字段是动态的,我想把字段替换成中文的,语句怎么写,谢谢!
...全文
702 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
0与1之间 2017-01-13
  • 打赏
  • 举报
回复
是不是只要取个别名就行了
nikolaichow 2017-01-13
  • 打赏
  • 举报
回复
使用sql语句动态拼接,然后通过exec(@sql)执行查询
引用 3 楼 ch21st 的回复:

CREATE TABLE tb_def([name] NVARCHAR(500),fname VARCHAR(200))
INSERT INTO tb_def

SELECT N'报销日期','fielddat1' UNION
SELECT N'凭证号','fieldstr2' UNION
SELECT N'附件数','fieldint3' UNION
SELECT N'制单人','fieldstr4' UNION
SELECT N'报销事由','longstr1' UNION
SELECT N'费用部门','liststr1' UNION
SELECT N'时间','listdat2' UNION
SELECT N'摘要','liststr3' 

CREATE TABLE tb_data(fieldstr1 DATETIME,fieldstr2 VARCHAR(500),fieldint3 INT,fieldstr4 VARCHAR(500),longstr1 VARCHAR(max),liststr1 VARCHAR(100),liststr3 VARCHAR(500))
INSERT INTO tb_data SELECT GETDATE(),'aaaa',1,'a',3,'e','f'

DECLARE @sql NVARCHAR(max),@tablename VARCHAR(200)='tb_data'
SELECT @sql=ISNULL(@sql+',','')+QUOTENAME(c.name)+' AS '+ ISNULL(tb_def.name,c.name) FROM sys.columns AS c 
LEFT JOIN tb_def ON c.name=tb_def.fname
WHERE OBJECT_NAME(c.object_id)=@tablename
PRINT @sql
SET @sql='SELECT '+@sql+ ' FROM '+@tablename
EXEC(@sql)
/*
附件数	fieldstr1	凭证号	制单人	费用部门	摘要	报销事由
1	2016-12-20 12:39:44.487	aaaa	a	e	f	3
*/
卖水果的net 2017-01-13
  • 打赏
  • 举报
回复
取别名,注意加方括号; select ccc [新名称] from ... PS:这个工作,在应用程序中实现,不更好吗?
道素 2016-12-20
  • 打赏
  • 举报
回复

CREATE TABLE tb_def([name] NVARCHAR(500),fname VARCHAR(200))
INSERT INTO tb_def

SELECT N'报销日期','fielddat1' UNION
SELECT N'凭证号','fieldstr2' UNION
SELECT N'附件数','fieldint3' UNION
SELECT N'制单人','fieldstr4' UNION
SELECT N'报销事由','longstr1' UNION
SELECT N'费用部门','liststr1' UNION
SELECT N'时间','listdat2' UNION
SELECT N'摘要','liststr3' 

CREATE TABLE tb_data(fieldstr1 DATETIME,fieldstr2 VARCHAR(500),fieldint3 INT,fieldstr4 VARCHAR(500),longstr1 VARCHAR(max),liststr1 VARCHAR(100),liststr3 VARCHAR(500))
INSERT INTO tb_data SELECT GETDATE(),'aaaa',1,'a',3,'e','f'

DECLARE @sql NVARCHAR(max),@tablename VARCHAR(200)='tb_data'
SELECT @sql=ISNULL(@sql+',','')+QUOTENAME(c.name)+' AS '+ ISNULL(tb_def.name,c.name) FROM sys.columns AS c 
LEFT JOIN tb_def ON c.name=tb_def.fname
WHERE OBJECT_NAME(c.object_id)=@tablename
PRINT @sql
SET @sql='SELECT '+@sql+ ' FROM '+@tablename
EXEC(@sql)
/*
附件数	fieldstr1	凭证号	制单人	费用部门	摘要	报销事由
1	2016-12-20 12:39:44.487	aaaa	a	e	f	3
*/
巨巨巨 2016-12-20
  • 打赏
  • 举报
回复
你想要什么效果?修改表的字段名?还是说查询结果显示中文字段名而已?
yuzhifu1 2016-12-19
  • 打赏
  • 举报
回复
name fname 报销日期 fielddat1 凭证号 fieldstr2 附件数 fieldint3 制单人 fieldstr4 报销事由 longstr1 费用部门 liststr1 时间 listdat2 摘要 liststr3 客户名称 liststr4 费用类别 liststr5 金额 listflo6 票据附件 liststr7 会计科目 liststr8 报销金额(小写) fieldflo6 报销金额(大写) fieldflo7 借款人 fieldstr8 借款金额 fieldflo9 报销金额 fieldflo10 应退补金额 fieldstr11 现金科目 fieldstr12 实付金额 fieldflo13 手续费 fieldflo14 主管审批 longstr2 经理审批 longstr3 总账会计 longstr4 批准人1 longstr5 批准人2 longstr6 财务经理 longstr7 出纳 longstr8 申请人 fieldstr5

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧