执行带参数存储过程数据集转动态列
时间: 2023-12-07 13:03:04 浏览: 28
可以使用以下 SQL Server 存储过程将数据集转换为动态列:
```sql
CREATE PROCEDURE [dbo].[DatasetToDynamicColumns]
@TableName nvarchar(100), -- 表名
@KeyName nvarchar(100), -- 主键列名
@ColumnName nvarchar(100), -- 列名
@ValueName nvarchar(100) -- 值列名
AS
BEGIN
SET NOCOUNT ON;
-- 获取动态列名
DECLARE @DynamicColumns nvarchar(MAX)
SELECT @DynamicColumns = COALESCE(@DynamicColumns + ', ', '') + QUOTENAME(@ColumnName + CAST(RowNumber AS NVARCHAR))
FROM (
SELECT DISTINCT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNumber
FROM dbo.@TableName
) AS RowNums
-- 构建动态 SQL 查询语句
DECLARE @DynamicSQL nvarchar(MAX)
SET @DynamicSQL = '
SELECT ' + QUOTENAME(@KeyName) + ', ' + @DynamicColumns + '
FROM (
SELECT ' + QUOTENAME(@KeyName) + ', ' + QUOTENAME(@ColumnName) + CAST(RowNumber AS NVARCHAR) + ', ' + QUOTENAME(@ValueName) + '
FROM dbo.' + QUOTENAME(@TableName) + '
CROSS APPLY (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNumber
) AS RowNums
) AS SourceTable
PIVOT (
MAX(' + QUOTENAME(@ValueName) + ')
FOR ' + QUOTENAME(@ColumnName) + CAST(RowNumber AS NVARCHAR) + ' IN (' + @DynamicColumns + ')
) AS PivotTable
'
-- 执行动态 SQL 查询语句
EXEC sp_executesql @DynamicSQL
END
```
使用示例:
```sql
EXEC [dbo].[DatasetToDynamicColumns] 'Sales', 'SalesID', 'Month', 'SalesAmount'
```
其中,`Sales` 为表名,`SalesID` 为主键列名,`Month` 为列名,`SalesAmount` 为值列名。根据实际情况修改参数即可。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)