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