SqlServer: 根据表头,生成表结构

-- =============================================
-- Author:		yenange
-- Create date: 2021-04-28
-- Description:	根据表头,生成表结构
-- =============================================
CREATE OR ALTER PROCEDURE [dbo].[Proc_CreateTableByHeader]
	@columnNames NVARCHAR(MAX)=N'a,b,c'		--数据字符串
	,@tableName  NVARCHAR(MAX)=N't'
AS
BEGIN
	SET NOCOUNT ON;
	DECLARE @t TABLE (
		rowNum INT PRIMARY KEY,
		columnName NVARCHAR(MAX)	
	)
	INSERT INTO @t
	SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)),[value] 
	FROM string_split(@columnNames,',');
	
	DECLARE @i INT,@imax INT,@columnName NVARCHAR(MAX),@sql NVARCHAR(MAX),@cols NVARCHAR(MAX)=''
	SELECT @i=1,@imax=MAX(rowNum) FROM @t
	SET @sql =N'USE tempdb
GO
IF OBJECT_ID(''@tableName'') IS NOT NULL 
	DROP TABLE @tableName
GO
CREATE TABLE @tableName(
@cols	
)
GO
'
	--	
	WHILE @i<=@imax
	BEGIN
		SELECT @columnName = columnName FROM @t WHERE rowNum=@i
		SET @cols= @cols + CASE WHEN @i=1 THEN '' ELSE + '
' END +@columnName+' nvarchar(max)'+CASE WHEN @i=@imax THEN '' ELSE ',' END
		SET @i=@i+1
	END
	--replace
	SET @sql=REPLACE(@sql,'@cols',@cols)
	SET @sql=REPLACE(@sql,'@tableName','dbo.['+@tableName+']')
	PRINT @sql;
END
GO

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值