Sql 感谢您回答我的问题表中的最大列数约为30到40,我有大约80个不同名称的表具有相同的结构。亲爱的Srini131,感谢您回答我的问题。亲爱的Srini131,感谢您回答我的问题。 CREATE PROCEDURE sp_buildtbldynamicall
Sql 感谢您回答我的问题表中的最大列数约为30到40,我有大约80个不同名称的表具有相同的结构。亲爱的Srini131,感谢您回答我的问题。亲爱的Srini131,感谢您回答我的问题。 CREATE PROCEDURE sp_buildtbldynamicall,sql,sql-server,database,tsql,Sql,Sql Server,Database,Tsql,感谢您回答我的问题表中的最大列数约为30到40,我有大约80个不同名称的表具有相同的结构。亲爱的Srini131,感谢您回答我的问题。亲爱的Srini131,感谢您回答我的问题。 CREATE PROCEDURE sp_buildtbldynamically @tbl_Name nvarchar(10), @num_col int AS BEGIN DECLARE @Counter int SET @Counter = 1 DECLARE @SQLStr
感谢您回答我的问题表中的最大列数约为30到40,我有大约80个不同名称的表具有相同的结构。亲爱的Srini131,感谢您回答我的问题。亲爱的Srini131,感谢您回答我的问题。
CREATE PROCEDURE sp_buildtbldynamically
@tbl_Name nvarchar(10),
@num_col int
AS
BEGIN
DECLARE @Counter int
SET @Counter = 1
DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString = 'CREATE TABLE ' + @tbl_Name + '(AB_ID PRIMARY KEY IDENTITY(1,1) NOT NULL' +
WHILE @Counter <= @num_col
BEGIN
// generator columns here dynamically with name (Name_1........Name_N)
SET @Counter = @Counter + 1
END
END
DECLARE @DynamiccOlumns nvarchar(max)
;With cte
AS
(
SELECT 'Name_'+CAST(Sno AS VARCHAR(10))AS Names FROM
(
SELECT ROW_NUMBER()OVER(ORDER BY (SELECT number)) AS Sno FROM master..spt_values
)DT
WHERE DT.Sno<=10
)
SELECT DISTINCT @DynamiccOlumns= STUFF((SELECT ', '+ Names +' nvarchar(10)' FROM cte FOR XML PATH ('')),1,1,'')
FROM cte
SELECT @DynamiccOlumns AS Names
create PROCEDURE sp_buildtbldynamically
@tbl_Name nvarchar(10),
@num_col int
AS
BEGIN
DECLARE @Counter int
SET @Counter =1
DECLARE @SQLString NVARCHAR(MAX)
-- does the table exists? If not, create
if not exists(select 1 from sys.tables t where t.[name]=@tbl_Name)
begin
SET @SQLString = 'CREATE TABLE [' + @tbl_Name + '](AB_ID int PRIMARY KEY IDENTITY(1,1) NOT NULL)'
exec sp_executesql @SQLString
end
while @Counter <= @num_col
Begin
set @SQLString='alter table ['+@tbl_Name+'] add [Name_'+cast(@Counter as varchar(2))+'] int'
exec sp_executesql @SQLString
print @SQLString
SET @Counter = @Counter + 1
END
END
go
exec dbo.sp_buildtbldynamically 'bob',3
go
CREATE PROCEDURE sp_buildtbldynamically @tbl_Name nvarchar(10), @num_col int
AS
BEGIN
declare @query nvarchar(max) = N'CREATE TABLE ['+@tbl_name+N']('
;with sql_rte as
(
select cast('[Name_1] [nvarchar](10)' as nvarchar(max)) col,1 rn
union all
select cast(',[Name_'+cast(rn+1 as varchar)+'] [nvarchar](10)' as nvarchar(max)) ,rn+1
from sql_rte
where rn<@num_col
)
select @query += col
from sql_rte
set @query += N')'
exec sp_executesql @query
end
Create PROCEDURE sp_buildtbldynamically
@tbl_Name nvarchar(10),
@num_col int
AS
BEGIN
DECLARE @Counter int
SET @Counter =1
DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString = 'CREATE TABLE ' + @tbl_Name + '(AB_ID INT PRIMARY KEY IDENTITY(1,1) NOT NULL)'
Exec(@SQLString)
while @Counter <= @num_col
Begin
Declare @SQL varchar(100)
Declare @Name varchar(100)
Set @Name = 'Name_' + Cast(@Counter as varchar(5));
SELECT @SQL = 'ALTER TABLE ' + @tbl_Name + ' ADD ' + @Name + ' INT'
EXEC (@SQL)
SET @Counter = @Counter + 1
END
END
CREATE PROCEDURE sp_buildtbldynamically
@tbl_Name nvarchar(10),
@num_col int
AS
BEGIN
DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString =
'CREATE TABLE [dbo].[' + @tbl_Name + ']([AB_ID] [INT] PRIMARY KEY IDENTITY(1,1) NOT NULL'
-- generator columns here dynamicall with name (Name_1........Name_N)
SELECT
TOP (SELECT @num_col)
@SQLString=COALESCE(@SQLString, '') +
', [Name_'+ CAST( ROW_NUMBER () OVER (ORDER BY (SELECT NULL)) AS VARCHAR(10)) +
'] [nvarchar](10) NULL'
FROM SYS.OBJECTS S1 CROSS JOIN SYS.OBJECTS S2
SET @SQLString=@SQLString+ ' ) ON [PRIMARY];'
exec (@SQLString)
END