use workflow;

GO
/****** 对象: StoredProcedure [dbo].[pro_GenerateProGet] 脚本日期: 08/03/2012 11:26:43 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[pro_GenerateProGet]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[pro_GenerateProGet]
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*****************************************************
** PROCEDURE : [pro_GenerateProSet]
** DECRIPTION: 生成(查询数据的存储过程)代码的存储过程
** VERSION AUTH DATE Defect No DESC
** -------- ------------ ------------ ----------------- ------------------------------
** V000.0.1 alpha 08/03/2012 新建程序
** -------- ------------ ------------ ----------------- -------------------------------
*******************************************************/
CREATE procedure [dbo].[pro_GenerateProGet](
@TbName NVARCHAR(200) ---表名
)
as
begin
DECLARE @TableName NVARCHAR(200) --表名
DECLARE @Parameters VARCHAR(8000) --所有参数
DECLARE @SelectFields VARCHAR(8000) --插入列(无唯一键)
DECLARE @SelectConditions VARCHAR(8000) --查询条件
SELECT @TableName = @TbName,@Parameters = '',@SelectConditions='',@SelectFields=''

if isnull(@TableName,'')=''
begin
print '表名不能为空!'
return 0
end

----输出存储过程名
PRINT 'CREATE PROCEDURE dbo.pro_get_'+dbo.fun_get_UpperFirst(@tablename)+'('

----全部参数
SELECT @Parameters = @Parameters + dbo.fun_get_tabspace(1)+'@'+COLUMN_NAME+' '+(
CASE
WHEN DATA_TYPE='NVARCHAR' OR DATA_TYPE='VARCHAR' OR DATA_TYPE='CHAR'OR DATA_TYPE='NCHAR'
THEN DATA_TYPE+ '('+CAST(CHARACTER_MAXIMUM_LENGTH AS NVARCHAR(20))+')'
when data_type='numeric'
then data_type+'('+CAST(numeric_precision AS NVARCHAR(20))+','+CAST(numeric_scale AS NVARCHAR(20))+')'
ELSE
DATA_TYPE
END)+','+CHAR(10) ---- CHAR(10)就是一个换行符
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName --AND COLUMN_NAME != @PrimaryKey

set @Parameters=LEFT(@Parameters,LEN(@Parameters)-2) ----去掉最后一个 ‘,’ 和 换行符

----查询字段
SELECT @SelectFields = @SelectFields + dbo.fun_get_tabspace(5)+'tb.'+COLUMN_NAME+' '+','+CHAR(10) -- CHAR(10)换行符
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName --AND COLUMN_NAME != @PrimaryKey
set @SelectFields=LEFT(@SelectFields,LEN(@SelectFields)-2)
---查询条件参数
SELECT @SelectConditions = @SelectConditions + dbo.fun_get_tabspace(1)+
(case when DATA_TYPE='numeric' then 'IF ISNULL(@'+COLUMN_NAME+',0)<>0 '
else 'IF ISNULL(@'+COLUMN_NAME+','''')<>'''' ' end)+CHAR(10)+dbo.fun_get_tabspace(1)+'begin'+CHAR(10)+dbo.fun_get_tabspace(2)+(
CASE
WHEN DATA_TYPE='NVARCHAR' OR DATA_TYPE='VARCHAR' OR DATA_TYPE='CHAR'OR DATA_TYPE='NCHAR'
THEN 'set @sql_str=@sql_str+ '' AND '+COLUMN_NAME+' like ''''%'' + @'+COLUMN_NAME+' + ''%'''''''
ELSE
'set @condition_str = CAST(@'+COLUMN_NAME+' AS VARCHAR(20))'+CHAR(10)+dbo.fun_get_tabspace(2)+
'set @sql_str=@sql_str+ '' AND tb.'+COLUMN_NAME+' like ''''%'' + @condition_str + ''%'''''''
END)+CHAR(10)+dbo.fun_get_tabspace(1)+'end'+CHAR(10)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName --AND COLUMN_NAME != @PrimaryKey
--set @SelectConditions=LEFT(@SelectConditions,LEN(@SelectConditions)-2) ----去掉最后一个 ‘,’ 和 换行符
--set @SelectFields=Replace(@SelectConditions,'@','')

PRINT @Parameters
PRINT ')'
PRINT 'AS'
PRINT 'BEGIN'
PRINT dbo.fun_get_tabspace(1)+'DECLARE @sql_str varchar(4000),'
PRINT dbo.fun_get_tabspace(3)+'@condition_str varchar(20)'
PRINT dbo.fun_get_tabspace(1)+'SET @sql_str = ''select'
print @SelectFields
print dbo.fun_get_tabspace(5)+'from '+@TableName+' tb'
print dbo.fun_get_tabspace(5)+'where 1 = 1'+CHAR(10)+dbo.fun_get_tabspace(5)+''''
print @SelectConditions
print 'EXEC (@sql_str)'

PRINT 'END'
end
/*

exec pro_GenerateProSet 'classinfo'

exec pro_GenerateProGet 'stuinfo'

select * from INFORMATION_SCHEMA.COLUMNS

*/

SQL 存储过程生成的更多相关文章

  1. 用SQL存储过程生成唯一单据号

    用SQL存储过程生成唯一单据号     在一些系统中,经理要生成单据号,为了不使多台客户端生成的单据号重复,一般要在服务端生成这种流水号,本文是在数据库中生成流水号,并且可以生成多种类型的单据号(比如 ...

  2. SQL存储过程生成顺序编码

    一.第一种方式 USE [WJKC]GO/****** Object:  StoredProcedure [dbo].[Address_GetCode1]    Script Date: 2016/3 ...

  3. SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息

    原文:SQL Server 2008空间数据应用系列十:使用存储过程生成GeoRSS聚合空间信息 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2 ...

  4. SQL Server 存储过程生成流水号

    SQL Server利用存储过程生成流水号 USE BiddingConfig SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO -- =========== ...

  5. sql存储过程比sql语句执行慢很多

    参数嗅探的问题 原因:(1)可能是发生了参数嗅探,第一次赋给存储过程的输入参数,会为该存储过程生成一个基于输入参数的执行计划,因此如果第一次输入的参数不具有代表性(例如大部分查询输入的参数都是A值,但 ...

  6. SQL存储过程概念剖析

    一.SQL存储过程的概念,优点及语法 定义:将常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execut ...

  7. SQL server 定时自动执行SQL存储过程

    当一个存储过程是为了生成报表,并且是周期性的,则不需要人工干预,由SQL作业定时自动执行些SQL存储过程即可. 本示例,假设已需要定时执行的存储过程为:Pr_test 工具/原料 SQL Server ...

  8. SQL*Plus生成html文件

    最近使用SQL*Plus命令生成html文件,遇到一些有意思的知识点,顺便记录一下,方便以后需要的时候而这些知识点又忘记而捉急.好记性不如烂笔头吗! 为什么要用SQL*Plus生成html文件?   ...

  9. PL/SQL存储过程编程

    PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...

随机推荐

  1. Ajax与jsonp

    1.ajax的概念 AJAX = Asynchronous Javascript And XML (AJAX  =  异步  javascript  和 xml) AJAX是一种无需重新加载整个网页的 ...

  2. hdu 4513 吉哥系列故事——完美队形II (manachar算法)

    吉哥系列故事——完美队形II Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) P ...

  3. C++教程|菜鸟教程

    https://www.runoob.com/cplusplus/cpp-tutorial.html 在线编辑器 http://www.runoob.com/try/runcode.php?filen ...

  4. scanf和scanf_s在VS2013中的使用

    转载:https://www.cnblogs.com/liuchaojiayou/p/4418215.html 在VS2013中,每次使用scanf都会报错:This function or vari ...

  5. 【转】ubunt 安装 yum出现 ubuntu 解决“无法获得锁 /var/lib/dpkg/lock -open (11:资源暂时不可用)”的方法

    今天本来是用xshell 链接本地的linux的,然而链接的时候没有主动弹出输入 用户名和密码的对话框,google搜了下,遇到了上面的问题. 解决办法如下:1.终端输入 ps  aux ,列出进程. ...

  6. Session、Cookie详解(2)

    session是web开发里一个重要的概念,在大多数web应用里session都是被当做现成的东西,拿来就直接用,但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求,当碰到这样的 ...

  7. 使用js时,如何获取系统当前时间并且得到格式为"yyyy年MM月"的日期

    1.使用js时,如何获取系统当前时间并且得到格式为"yyyy年MM月"的日期: 1 var newdate = new Date(); 2 var nowyear = newdat ...

  8. Linux->apt-包的位置和变更

    ubuntu中由apt-get获得的文件包保存在/var/cache/apt/archives: 通过apt-get命令下载的软件包,放在/var/cache/apt/archives 目录下: 下载 ...

  9. S/4HANA生产订单的标准状态和透明工厂原型状态的映射

    事务码CO03查看生产订单的状态: 从下面的界面能看出S/4HANA里生产订单在任意时刻可能存在多个状态: 生产订单的ID和状态ID的关系是1:N,维护在数据库表VSAUFK里: 如何把上述SAP系统 ...

  10. some language grammars

    ANSI C grammar Python grammar 怎么识别LL(1) LR(0) SLR(1) 等文法,一个不错的解答. http://stackoverflow.com/questions ...