1. create PROC CreateTableSql
  2. @TableName varchar(50)
  3. AS
  4.  
  5. declare @FieldName varchar(50) ,@FieldDescrible varchar(50) ,@DbType varchar(50)
  6. declare @DbLength varchar(50) ,@DbDecimal varchar(50) ,@Default varchar(50) ,@IsIdentity bit ,@IsNull bit ,@IsPrimaryKey bit
  7. declare @CreateSql varchar(8000),@AddFieldSql varchar(300),@FieldSql varchar(3000)
  8. declare @PrimaryKey varchar(200) ,@NULL varchar(10) ,@Identity varchar(20),@PropertySql varchar(8000)
  9. set @PrimaryKey=''
  10. set @FieldSql=''
  11. SET @PropertySql=''
  12. DECLARE MyCursor CURSOR FOR
  13. select FieldName,isnull(FieldDescrible,''),isnull(DbType,''),DbLength,DbDecimal,isnull([Default],''),IsIdentity,
  14. isnull([IsNull],0),IsPrimaryKey
  15. from Fields where TableName =@TableName order by SortNO
  16. OPEN MyCursor
  17. FETCH NEXT FROM MyCursor
  18. INTO @FieldName,@FieldDescrible,@DbType,@DbLength,@DbDecimal,@Default,@IsIdentity,@IsNull,@IsPrimaryKey
  19.  
  20. WHILE @@FETCH_STATUS = 0
  21. BEGIN
  22.  
  23. if @IsNull=1 set @NULL =' NULL' ELSE set @NULL =' NOT NULL'
  24. if @IsPrimaryKey =1 set @NULL =' NOT NULL'
  25.  
  26. if @DbType in ('uniqueidentifier','int','datetime','timestamp','smallint') set @DbLength=''
  27. else set @DbLength='('+@DbLength+')'
  28. if @IsIdentity=1 set @Identity =' IDENTITY(1,1) ' else set @Identity =''
  29.  
  30. if @Default=''
  31. set @AddFieldSql = ' ['+ @FieldName+'] ' + @DbType +@DbLength +@Identity+ @Null +','
  32. else
  33. set @AddFieldSql = ' ['+ @FieldName+'] ' + @DbType +@DbLength +@Identity+ @Null +' default '+@Default +','
  34. if @FieldSql=''
  35. set @FieldSql= @AddFieldSql
  36. else
  37. set @FieldSql= @FieldSql+ CHAR(10) +@AddFieldSql
  38.  
  39. if @IsPrimaryKey =1
  40. begin
  41. if @PrimaryKey<>'' set @PrimaryKey= @PrimaryKey+'['+ @FieldName+'] '
  42. if @PrimaryKey='' set @PrimaryKey= '['+ @FieldName+'] '
  43. end
  44.  
  45. SET @PropertySql=@PropertySql+CHAR(10)+ ' GO'+ CHAR(10)+ 'EXEC sys.sp_addextendedproperty @name=N'+''''+'MS_Description'+''''+', @value=N'+''''+@FieldDescrible +''''+', @level0type=N'+''''+'SCHEMA'+''''
  46. +',@level0name=N'+''''+'dbo'+'''' +', @level1type=N'+''''+'TABLE'+''''+',@level1name=N'+''''+@TableName+''''+', @level2type=N'+''''+'COLUMN'+''''+',@level2name=N'+''''+@FieldName+''''
  47.  
  48. FETCH NEXT FROM MyCursor
  49. INTO @FieldName,@FieldDescrible,@DbType,@DbLength,@DbDecimal,@Default,@IsIdentity,@IsNull,@IsPrimaryKey
  50.  
  51. END
  52. CLOSE MyCursor;
  53. DEALLOCATE MyCursor;
  54.  
  55. set @CreateSql =' if exists (select * from sysobjects where name='''+@TableName +''')'
  56. set @CreateSql=@CreateSql+ CHAR(10) + ' drop table '+@TableName
  57. set @CreateSql=@CreateSql+ CHAR(10) + ' GO '
  58. set @CreateSql=@CreateSql+ CHAR(10) + ' CREATE TABLE '+@TableName+ CHAR(10)+'('
  59. set @CreateSql=@CreateSql+ CHAR(10) + ''+@FieldSql
  60. set @CreateSql=@CreateSql+ CHAR(10) + ' CONSTRAINT [PK_'+ @TableName +'] PRIMARY KEY CLUSTERED ('
  61. set @CreateSql=@CreateSql+ CHAR(10) +' '+ @PrimaryKey+' ASC '+ CHAR(10)+' )'
  62. set @CreateSql=@CreateSql+ CHAR(10) + ' WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] '
  63. set @CreateSql=@CreateSql+ CHAR(10) +' ) ON [PRIMARY] '
  64.  
  65. PRINT @CreateSql
  66. print @PropertySql

根据字段表 自动创建 表SQL的更多相关文章

  1. sql自动创建表并复制数据

    ---------------自动创建表并复制数据sql,需要自己设置主键----------- select * into 新表 from 旧表

  2. SQL Server ->> 自动创建表并从文件加载数据

    这个存储过程自动创建表并从文件加载数据. 有一点需要说明的是Excel 12.0驱动是兼容了Excel 97-2003和Excel 2007两者格式的Excel文件. CREATE PROCEDURE ...

  3. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  4. mysql 按照月份自动创建表,以年和月为表明,动态生成。

    需求:mysql5.5 数据库,想要根据月份自动创建表,每个月创建一张表,需要数据库自动创建,并根据当前年和月动态生成表名称. 解决办法:1 连接数据库工具为Navicat  2  首先创建存储过程, ...

  5. Hibernate 自动创建表bug问题解决

    我在hibernate.cfg.xml配置文件中添加了自动创建表的的属性:(这样当数据库中没有此表是,hibernate就会自动帮我们创建一张表) <property name="hb ...

  6. --自动创建备份SQL

    --自动创建备份SQL DECLARE @dbname VARCHAR(50) ,--要备份的数据库名称 @bakname VARCHAR(50) ,--备份后的bat名称 @sql VARCHAR( ...

  7. Hibernate自动创建表

    只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update& ...

  8. Hibernate根据实体类自动创建表

    Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...

  9. hibernate自动创建表报表不存在

    在hibernate.cfg.xml配置了<property name="hibernate.hbm2ddl.auto">update</property> ...

随机推荐

  1. iOS Core ML与Vision初识

    代码地址如下:http://www.demodashi.com/demo/11715.html 教之道 贵以专 昔孟母 择邻处 子不学 断机杼 随着苹果新品iPhone x的发布,正式版iOS 11也 ...

  2. 查看、修改linux系统的最大链接数限制、文件描述符限制、端口范围限制、虚拟内存等

    一.修改最大连接数 1.查看当前文件描述符的限制数目的命令: ulimit -n 2.修改文件描述符的限制数目 2.1 临时改变当前会话: ulimit -n 65536 2.2 永久变更需要下面两个 ...

  3. POJ训练计划3096_Surprising Strings(STL/map)

    解题报告 id=3096">题目传送门 题意: 给一个字符串,要求.对于这个字符串空隔为k取字符对(k=0,1,2,3,4...)要求在同样的空隔取对过程汇总.整个字符串中没有一个同样 ...

  4. win10 VS code 编译运行 C/C++的方法

    具体配置过程如下链接: https://zhuanlan.zhihu.com/p/35178331 但中间出了点问题:CTRL+ALT+n 运行后: PS D:\C++> cd "d: ...

  5. RandomForest 调参

    在scikit-learn中,RandomForest的分类器是RandomForestClassifier,回归器是RandomForestRegressor,需要调参的参数包括两部分,第一部分是B ...

  6. Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结

    Atitit..状态机与词法分析  通用分词器 分词引擎的设计与实现 attilax总结 1. 状态机 理论参考1 2. 词法分析理论1 3. 词法分析实例2 4. ---code fsm 状态机通用 ...

  7. C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3

    Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的 ...

  8. UI-7-UIScrollView

    #import "ViewController.h" @interface ViewController ()<UIScrollViewDelegate> { UIIm ...

  9. LeetCode406. Queue Reconstruction by Height Add to List

    Description Suppose you have a random list of people standing in a queue. Each person is described b ...

  10. Yii简单使用阿里云短信教程!

    首先我们下载官方完整包的SDK官方标明了啊,PHP版本一定要不低于5.5下载后目录如下: 我们只需要将目录里的api_sdk复制出来到Yii项目的根目录的common模块下面的extensions文件 ...