nischalinn Ответов: 1

создание динамических столбцов таблицы в соответствии с пользовательским вводом с помощью хранимой процедуры


Я хочу создать таблицу с динамическими столбцами т. е. количество столбцов, определяемых с помощью
пользователь
использование хранимой процедуры.

Позвольте мне уточнить мое требование, мне нужно создать таблицу (dyn_tbl) через SP, входными данными которой будет "количество полей".

напр.
----------------------------------------------------------------
CREATE OR REPLACE PROCEDURE dynamic_tbl (num_fields varchar2)
AS

num_fields varchar2(25);

BEGIN

END;
/

----------------------------------------------------------------
Если пользователь вводит num_fields = 3, то o/p будет;

create table dyn_tbl
(
col_1 varchar2(20);
col_2 varchar2(20);
col_3 varchar2(20);
);

*********

Если пользователь вводит num_fields = 5, то o/p будет;

create table dyn_tbl
(
col_1 varchar2(20);
col_2 varchar2(20);
col_3 varchar2(20);
col_4 varchar2(20);
col_5 varchar2(20);
);


************************************************

Здесь имя столбца отличается только тем, что там последний символ, который основан на пользователе
требование
.

Как я могу это сделать?

1 Ответов

Рейтинг:
2

Sadique KT

CREATE PROCEDURE dynamic_tbl
@ColumnCount int=0
AS 
BEGIN
	Declare @ColumnName nvarchar(10)='col_'
	Declare @count int =1
	IF(@ColumnCount>0)
	BEGIN
		IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND  TABLE_NAME = 'dyn_tbl'))
		BEGIN
			
			DROP TABLE dyn_tbl
		END
		CREATE TABLE [dbo].[dyn_tbl]
		(	col_1 varchar(20)	)
		SET @count=@count +1;
		WHile(@ColumnCount>=@count) 
		BEGIN
			SET @ColumnName='col_'+CONVERT(varchar(2),@count)
			EXEC ('ALTER TABLE dyn_tbl ADD ['+@ColumnName +'] varchar(20)')
			SET @count=@count +1;
		END
	END
END


nischalinn

спасибо за ответ.

но я думаю, что будет лучше, если мы создадим таблицу с помощью цикла, а затем выполним ее
вместо того, чтобы каждый раз изменять таблицу в соответствии с требованиями.

Sadique KT

если у вас есть другой способ, пожалуйста, опубликуйте код..