根据字段表 自动创建 表SQL
create PROC CreateTableSql
@TableName varchar(50)
AS declare @FieldName varchar(50) ,@FieldDescrible varchar(50) ,@DbType varchar(50)
declare @DbLength varchar(50) ,@DbDecimal varchar(50) ,@Default varchar(50) ,@IsIdentity bit ,@IsNull bit ,@IsPrimaryKey bit
declare @CreateSql varchar(8000),@AddFieldSql varchar(300),@FieldSql varchar(3000)
declare @PrimaryKey varchar(200) ,@NULL varchar(10) ,@Identity varchar(20),@PropertySql varchar(8000)
set @PrimaryKey=''
set @FieldSql=''
SET @PropertySql=''
DECLARE MyCursor CURSOR FOR
select FieldName,isnull(FieldDescrible,''),isnull(DbType,''),DbLength,DbDecimal,isnull([Default],''),IsIdentity,
isnull([IsNull],0),IsPrimaryKey
from Fields where TableName =@TableName order by SortNO
OPEN MyCursor
FETCH NEXT FROM MyCursor
INTO @FieldName,@FieldDescrible,@DbType,@DbLength,@DbDecimal,@Default,@IsIdentity,@IsNull,@IsPrimaryKey WHILE @@FETCH_STATUS = 0
BEGIN if @IsNull=1 set @NULL =' NULL' ELSE set @NULL =' NOT NULL'
if @IsPrimaryKey =1 set @NULL =' NOT NULL' if @DbType in ('uniqueidentifier','int','datetime','timestamp','smallint') set @DbLength=''
else set @DbLength='('+@DbLength+')'
if @IsIdentity=1 set @Identity =' IDENTITY(1,1) ' else set @Identity ='' if @Default=''
set @AddFieldSql = ' ['+ @FieldName+'] ' + @DbType +@DbLength +@Identity+ @Null +','
else
set @AddFieldSql = ' ['+ @FieldName+'] ' + @DbType +@DbLength +@Identity+ @Null +' default '+@Default +','
if @FieldSql=''
set @FieldSql= @AddFieldSql
else
set @FieldSql= @FieldSql+ CHAR(10) +@AddFieldSql if @IsPrimaryKey =1
begin
if @PrimaryKey<>'' set @PrimaryKey= @PrimaryKey+'['+ @FieldName+'] '
if @PrimaryKey='' set @PrimaryKey= '['+ @FieldName+'] '
end SET @PropertySql=@PropertySql+CHAR(10)+ ' GO'+ CHAR(10)+ 'EXEC sys.sp_addextendedproperty @name=N'+''''+'MS_Description'+''''+', @value=N'+''''+@FieldDescrible +''''+', @level0type=N'+''''+'SCHEMA'+''''
+',@level0name=N'+''''+'dbo'+'''' +', @level1type=N'+''''+'TABLE'+''''+',@level1name=N'+''''+@TableName+''''+', @level2type=N'+''''+'COLUMN'+''''+',@level2name=N'+''''+@FieldName+'''' FETCH NEXT FROM MyCursor
INTO @FieldName,@FieldDescrible,@DbType,@DbLength,@DbDecimal,@Default,@IsIdentity,@IsNull,@IsPrimaryKey END
CLOSE MyCursor;
DEALLOCATE MyCursor; set @CreateSql =' if exists (select * from sysobjects where name='''+@TableName +''')'
set @CreateSql=@CreateSql+ CHAR(10) + ' drop table '+@TableName
set @CreateSql=@CreateSql+ CHAR(10) + ' GO '
set @CreateSql=@CreateSql+ CHAR(10) + ' CREATE TABLE '+@TableName+ CHAR(10)+'('
set @CreateSql=@CreateSql+ CHAR(10) + ''+@FieldSql
set @CreateSql=@CreateSql+ CHAR(10) + ' CONSTRAINT [PK_'+ @TableName +'] PRIMARY KEY CLUSTERED ('
set @CreateSql=@CreateSql+ CHAR(10) +' '+ @PrimaryKey+' ASC '+ CHAR(10)+' )'
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] '
set @CreateSql=@CreateSql+ CHAR(10) +' ) ON [PRIMARY] ' PRINT @CreateSql
print @PropertySql
根据字段表 自动创建 表SQL的更多相关文章
- sql自动创建表并复制数据
---------------自动创建表并复制数据sql,需要自己设置主键----------- select * into 新表 from 旧表
- SQL Server ->> 自动创建表并从文件加载数据
这个存储过程自动创建表并从文件加载数据. 有一点需要说明的是Excel 12.0驱动是兼容了Excel 97-2003和Excel 2007两者格式的Excel文件. CREATE PROCEDURE ...
- Hibernate连接mysql数据库并自动创建表
天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...
- mysql 按照月份自动创建表,以年和月为表明,动态生成。
需求:mysql5.5 数据库,想要根据月份自动创建表,每个月创建一张表,需要数据库自动创建,并根据当前年和月动态生成表名称. 解决办法:1 连接数据库工具为Navicat 2 首先创建存储过程, ...
- Hibernate 自动创建表bug问题解决
我在hibernate.cfg.xml配置文件中添加了自动创建表的的属性:(这样当数据库中没有此表是,hibernate就会自动帮我们创建一张表) <property name="hb ...
- --自动创建备份SQL
--自动创建备份SQL DECLARE @dbname VARCHAR(50) ,--要备份的数据库名称 @bakname VARCHAR(50) ,--备份后的bat名称 @sql VARCHAR( ...
- Hibernate自动创建表
只要在hibernate.cfg.xml添加这句话,就可以自动生成数据表 <property name="hibernate.hbm2ddl.auto">update& ...
- Hibernate根据实体类自动创建表
Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 如何使用呢?很简单,只要在hibernate.cfg.xml里加上如下代码 Xml代码<propert ...
- hibernate自动创建表报表不存在
在hibernate.cfg.xml配置了<property name="hibernate.hbm2ddl.auto">update</property> ...
随机推荐
- Android五大布局标签和属性总结
1.LinearLayout orention 水平和垂直 weight 切割闲置空间 水平布局 切割宽度 垂直布局 切割的高度 切割的时候 指定的高度或者宽度不能用fill_parent/ ...
- (四)Maven构建多模块项目
在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),这样分层之 ...
- struts上传文件 血案
记录一个图片上传之后没有后缀 拓展名问题 平常我们查询数据都是 fileImage=fileImageService.getQuery(); 让entity等于它 那么fileImage.getF ...
- Android 关于ZXing的使用
1.http://blog.csdn.net/ryantang03/article/details/7831826 2.http://blog.csdn.net/xiaanming/article/d ...
- ASP.NET_SessionId 不相同导致验证码出错
问题: 今天碰到一个比较奇怪的问题,每个页面请求的cookie的ASP.NET_SessionId 不相同,导致验证码检验出错.也就是说每个请求都是一个新的会话,我们把验证码保证在Session[ra ...
- 8.1.2 绑定Activity和Service
8.1.2 绑定Activity和Service 2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T <Android/OPhone开发完全讲义>第8章Andro ...
- android proguard 保留内部类
今天在使用Proguard keep一个 静态内部类的时候,混淆完之后一直找不到那个静态内部类,内心抓狂啊. 最后在stackoverflow上找到了答案: -keepattributes Excep ...
- Mat::operator =
Provides matrix assignment operators. C++: Mat& Mat::operator=(const Mat& m) C++: Mat& M ...
- phpExcel常用方法详解【附有php导出excel加超级链接】
phpExcel常用方法详解[附有php导出excel加超级链接] 发表于4年前(-- :) 阅读() | 评论() 0人收藏此文章, 我要收藏 赞0 http://www.codeplex.com/ ...
- iOS开发多线程篇 10 —NSOperation基本操作
iOS开发多线程篇—NSOperation基本操作 一.并发数 (1)并发数:同时执⾏行的任务数.比如,同时开3个线程执行3个任务,并发数就是3 (2)最大并发数:同一时间最多只能执行的任务的个数. ...