SQL Server 動態創建表結構


需求是,在word里面設計好表結構(主要在word中看起來一目了然,方便維護),然后復制sql 里面,希望動態創建出來
存儲表結構的表
CREATE TABLE [dbo].[Sys_CreateTable](
        [序號] [int] IDENTITY(1,1) NOT NULL,
        [中文名] [nvarchar](500) NULL,
        [英文名] [nvarchar](500) NULL,
        [類型、寬度、精度] [nvarchar](500) NULL,
        [默認值/描述] [nvarchar](500) NULL,
        [表名] [nvarchar](500) NULL,
        [表中文名] [nvarchar](500) NULL,
CONSTRAINT [PK_Sys_CreateTable] PRIMARY KEY CLUSTERED 
(
        [序號] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
CREATE PROCEDURE SP_SYS_DynamicCreate
AS
BEGIN
        
        SET NOCOUNT ON;

    
                Declare @sql nvarchar(max)

                Set @sql = ''

                ;WITH  NewTable As (
                        Select 表名,表中文名 From Sys_CreateTable Group By 表名,表中文名
                )

                Select  @sql = @sql + Case When number = 1 Then '); 
                
                -- Drop Table '+表名+';
                 
                 CREATE TABLE '+表名+' ( 
                 ' Else '' End  + (
                Case When number = 1 Then '         ['+英文名+'] '+[類型、寬度、精度] + ' NULL' Else '
                        ,['+英文名+'] '+[類型、寬度、精度] + ' NULL' End) From (
                Select  row_number()OVER(PARTITION BY a.表名 ORDER BY 序號 asc) As number,b.* From NewTable As A
                Left Join Sys_CreateTable As b On a.表名 = b.表名
                ) As o

                Set @sql  =  Right(@sql,LEN(@sql) -2 ) + ')'
--Print @sql
                Exec (@sql)


END

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM