是否可以在MSSQL中使用表值函数来获取属性并使用Pivot函数生成关联的SQL语句?
CREATE FUNCTION dbo.fnPivot (@EntityTypeID int)
RETURNS TABLE
AS
BEGIN
DECLARE @SQL varchar(MAX);
DECLARE @COLS varchar(MAX);
select @COLS=coalesce(@COLS+',','')+'['+Name+']'from c_EntityAttribute WHERE EntityTypeID = @EntityTypeID;
SET @SQL = 'SELECT * FROM (SELECT EntityInstanceID, AttributeName, Value FROM v_EntityElementData WHERE EntityTypeID = 1) as s';
SET @SQL = @SQL + 'PIVOT ( MIN(Value) FOR AttributeName IN (' + @COLS + ') ) AS p';
RETURN EXEC sp_ExecuteSQL @SQL ;
END
Run Code Online (Sandbox Code Playgroud)
遗憾的是,除了存储过程外,SQL Server会跟踪所有视图,函数等输出的表定义.因此,列和类型不能在输入上动态更改.
出于这个原因,我从未发现PIVOT算子有用.通常,获取不同列数据的唯一方法是将其视为XML.
你出于什么原因转动它?这通常是一个UI问题,因此我建议在UI或SSRS等处进行.