源表
Col1 |Col2 |Col3 |Col4 | Col5
----------------------------------
hi | this | is | a | test
目的地表
RowValues|
----------
hi
this
is
a
test
我正在使用动态 SQL。有什么帮助吗?
这是我的代码,只需将 where 子句中的表名和 Id 更改为适合您的
DECLARE @sql nVARCHAR(max), @TableName nvarchar(100), @where nvarchar(max)
set @TableName = 'stockItems'
set @where= ' where id = 2'
select @sql ='Select '
select @sql = @sql+ + ' '''+ [name] +' = ''+ cast(' + [name] + ' as nvarchar(10)) as '+[name]+', '
from sys.columns where object_name (object_id) = @TableName
set @sql = stuff(@sql, len(@sql), 1, '') + ' From '+@TableName+ @where
print @sql
set @sql = REPLACE(@sql,', From',' From')
set @sql = @sql + ' '
print @sql
exec(@sql)
现在我需要创建一个新表,其中有一列将每个值保存为一行
感谢@Mahmoud-Gamal 解决方案应该如下所示
declare @cols nvarchar(max)
select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(column_name)
FROM information_schema.columns
WHERE table_name = 'vehicles'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');
declare @statement nvarchar(max)
set @statement ='
SELECT
ColumnName, Value
FROM
Vehicles
UNPIVOT
(
Value
FOR ColumnName
IN
(
'+@cols+'
)
)
AS A'
execute(@statement)
请将“车辆”表名称更改为数据库中包含不同类型(日期时间、整数和 nvarchar)列的任何表,并显示以下错误有帮助吗? “描述”列的类型与 UNPIVOT 列表中指定的其他列的类型冲突。