我在SQL Server中有下一部分代码。
SET @cols = STUFF((
SELECT DISTINCT
','+QUOTENAME([c].[Name])
FROM #features c FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
SET @query = 'SELECT [Id],
[Url],
[Title],
[Address],
[Domain],
[Price],
[Code],
[Image]
' + @cols + '
FROM (SELECT [Id],
[Url],
[Title],
[Address],
[Domain],
[Price],
[Code],
[Image],
[Value] AS [value],
[Name] AS [name]
FROM #temptable) x
PIVOT(max(value) for name in (' + @cols + ')) p';
它将返回我的行数 Name
作为列与 Values
作为相应的数值。这个没有问题。但我在使用Dapper在.NET中执行查询,在注意到那些动态列没有被映射到我的类后,我开始研究,发现下面的内容被检索到了。
所以,这些属性与 \r\n
正在给我带来映射方面的问题。我试图删除列中的那些空格,但没有成功。有什么办法可以解决这个问题吗?
更新一下。
的定义... #features
和 #temptable
是以下内容。
CREATE TABLE #features
(
[Id] INT,
[Name] NVARCHAR(80)
)
CREATE TABLE #temptable
(
[Id] INT,
[Url] NVARCHAR(200),
[Title] NVARCHAR(300),
[Address] NVARCHAR(200),
[Domain] Tinyint,
[Price] Real,
[Code] NVARCHAR(10),
[Image] NVARCHAR(150),
[Name] NVARCHAR(80),
[Value] NVARCHAR(150)
)
与原来的部分
SET @cols = STUFF((
SELECT DISTINCT
','+QUOTENAME([c].[Name])
FROM #features c FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, '');
我得到了以下结果。
但是,如果我把这段替换成
SET @cols = REPLACE(REPLACE(STUFF((
SELECT DISTINCT
','+QUOTENAME([c].[Name])
FROM #features c FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, ''),CHAR(13), ''), CHAR(10), '')
我在这些动态列中获得了null
更新2。
CREATE TABLE #features
(
[Id] INT,
[Name] NVARCHAR(80)
)
INSERT INTO #features
SELECT [Id], [Name]
FROM Feature
SELECT DISTINCT
', [' + [f].[Name] + ']'
FROM #features f
情况如下
但是 Name
字段的值中没有空格。
先谢谢你了。
当我执行下面的代码时,我确实得到了一个合适的输出。
SET @cols = (SELECT STUFF((SELECT DISTINCT
',' + QUOTENAME(REPLACE(REPLACE([c].[Name], CHAR(13), ''), CHAR(10), ''))
FROM #features c FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)'), 1, 1, ''));
SET @query = 'SELECT [Id],
[Url],
[Title],
[Address],
[Domain],
[Price],
[Code],
[Image]
' + @cols + '
FROM (SELECT [Id],
[Url],
[Title],
[Address],
[Domain],
[Price],
[Code],
[Image],
[Value] AS [value],
[Name] AS [name]
FROM #temptable) x
PIVOT(max(value) for name in (' + @cols + ')) p';
EXEC (@query);
我想你需要给我们一些两张表的样本数据 才能知道发生了什么。