3.4w+
社区成员
我的代码如下:
DECLARE @sql NVARCHAR(4000)
SELECT @sql=isnull(@sql+',','')+quotename(Name)
FROM tempdb.dbo.syscolumns
WHERE ID=object_id('tableB') AND Name NOT IN('id','name')
ORDER BY Colid ;
PRINT (@SQL);
set @sql='INSERT INTO [dbo].[tableA] SELECT
id,name,
[Fieldname] ,
[ValueField]
FROM tableB UNPIVOT ([ValueField] FOR [Fieldname] IN ( '+@sql+' ) ) unpiv '
print(@sql)
exec(@sql)
想实现的效果是将B表的数据经过行列转换后保存到A表中。
目前知道问题发生原因是因为B表中有些字段的数据类型是时间类型,需要经过类型转换才能保存到A表中。
因为B表中除了id和name是固定不变的字段名外,其他字段名称是会有变化的(值也会变,有时时间有时文本)。
看到过一些参考资料都是将tableB里面的每一列都cast()(如图)。这样的方法需要将字段名都写死。