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
时间: 2024-08-07 21:17:57

SQL Server 动态创建表结构的相关文章

sql server抓取表结构的语句

sql server 2008抓取方法: --------------------------------------- SELECT 表名 = Case When A.colorder=1 Then D.name Else '' End, 表说明 = Case When A.colorder=1 Then isnull(F.value,'') Else '' End, 字段序号 = A.colorder, 字段名 = A.name, 字段说明 = isnull(G.[value],''), 标

使用SQL Server 2012创建表

一.使用图形化界面创建表 在管理平台中,展开指定的服务器和数据库,打开想要创建新表的数据库,用右键单击“表”对象,从弹出的快捷菜单中选择“新建表”选项,就会出现“新建表”窗口,如图所示,在该窗口中,可以定义列名.数据类型.是否允许空.及其它相关属性等. 二.使用Transact-SQL语句建表 输入SQL命令 写完代码后,首先点击“√”以验证语法是否正确,然后点击“!执行”,执行SQL语句. 如果没有出错,将会有提示 原文地址:https://www.cnblogs.com/cyx-b/p/12

SQL server 语句创建表

use uer --纸箱当前所操作的数据库go--创建商品类别表create table Commoditysort (SortId int IDENTITY(1,1) NOT NULL,--类别IDSortName varchar(50) NOT NULL --类别名称)go --商品信息表 use uergocreate table CommodityInfo( CommodityID int IDENTITY(1,1) NOT NULL,--商品的ID Sortid int NOT NUL

Sql Server 导出数据库表结构的SQL查询语句

1 --导出数据库所有表 2 3 SELECT 4 表名 = Case When A.colorder=1 Then D.name Else '' End, 5 表说明 = Case When A.colorder=1 Then isnull(F.value,'') Else '' End, 6 字段序号 = A.colorder, 7 字段名 = A.name, 8 字段说明 = isnull(G.[value],''), 9 标识 = Case When COLUMNPROPERTY( A.

Sql语句不能识别Go的解决办法(动态创建表的触发器)

问题来源 用sqlserver直接打开sql文本,执行没问题,但是当用Sqlcommand类执行cmdtext命令文本时总是失败报错. 原因分析及解决 用数据库直接执行sql语句没问题,甚至还可以用Go来进行分批处理,但是当你用链接类访问数据库,并执行sql语句时就有些限制,如下: System.Data.SqlClient.SqlCommand cmd; try { using (System.Data.SqlClient.SqlConnection newconn = new System.

SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段

一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL,动态列字段: 方法三:使用PIVOT关系运算符,静态列字段: 方法四:使用PIVOT关系运算符,动态列字段: 扩展阅读一:参数化表名.分组列.行转列字段.字段值: 扩展阅读二:在前面的基础上加入条件过滤: 参考文献(References) 二.背景(Contexts) 其实行转列并不是一个什么新鲜的

Sql Server中判断表、列不存在则创建的方法[转]

一.Sql Server中如何判断表中某列是否存在 首先跟大家分享Sql Server中判断表中某列是否存在的两个方法,方法示例如下: 比如说要判断表A中的字段C是否存在两个方法: 第一种方法  ? 1 2 3 4 5 6 7 8 IF EXISTS (  SELECT 1 FROM SYSOBJECTS T1  INNER JOIN SYSCOLUMNS T2 ON T1.ID=T2.ID  WHERE T1.NAME='A' AND T2.NAME='C'  )  PRINT '存在'  E

SQL server 数据库用户表名称

转自(http://blog.163.com/jlj_sk/blog/static/22579293200861422833924/) 取得SQL server 数据库中 所有用户表名称 select name from sysobjects where xtype='U' order by name SQL server数据库系统表详解: sysaltfiles 主数据库 保存数据库的文件 syscharsets 主数据库字符集与排序顺序 sysconfigures主数据库 配置选项 sysc

Entity Framework(三):使用特性(数据注解)创建表结构

一.理解Code First及其约定和配置 传统设计应用的方式都是由下而上的,即我们习惯优先考虑数据库,然后使用这个以数据为中心的方法在数据之上构建应用程序.这种方法非常适合于数据密集的应用或者数据库很可能包含多个应用使用的业务逻辑的应用.对于这种应用,如果要使用EF的话,我们必须使用Database First方式. 设计应用的另一种方法就是以领域为中心的方式(领域驱动设计DDD).DDD是一种由上而下的方式,我们通过从实现应用所需要的领域模型和实体的角度思考,从而开始设计应用.数据库很少用来