- 浏览: 796788 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (480)
- Spring (12)
- Hibernate (8)
- Struts2 (4)
- Java 基础-JDK-类-接口-URI-专题研究 (27)
- 线程、线程池、多线程高并发高可用、Socket通信 (15)
- Oracle数据库 (20)
- 一般-前端js-html-其它 (25)
- JYSK-互联网金融、金融科技、支付、公司、新闻等等 (8)
- Ajax-jQuery开源框架 (7)
- Json-轻量级的数据交换格式 (14)
- JavaScript (15)
- Jsp、Servlet、Servlet+JSP+JavaBean开发模式(MVC) (18)
- Html-JavaScript-前端-调用接口 (12)
- Sql Server 2005 (6)
- 正则表达式 (2)
- Java tools (18)
- 加签与验签、加密与解密 (3)
- Ajax技术核心-xmlHttpRequest(简称XHR) (6)
- xml-数据交换格式 (3)
- 信息采集 (1)
- Http - Https - HttpClient - httpCore-SSL-TLS (10)
- HtmlParser (2)
- 标签库 (1)
- SMS (2)
- jxl-导入导出 (4)
- poi-导入导出 (2)
- 定时器Timer+Quartz (6)
- 工作流引擎JBPM3.2.3 (4)
- 工作流引擎JBPM4 (0)
- 数据源-JNDI (0)
- tomcat、weblogic等应用服务器 (6)
- 工作流引擎jbpm5 (1)
- 搜索引擎Lucene (1)
- ant (1)
- 大数据-HBase (2)
- bigtable (0)
- 数据库设计 (4)
- jquery tab (0)
- mybatis (5)
- jquery ui 1.10.3 (5)
- Jboss7 (1)
- 规则引擎drools (0)
- 工作流引擎Activiti5 (0)
- 数据库-用户自定义函数 (0)
- 数据库-存储过程 (2)
- 数据库-视图 (0)
- 数据库-触发器 (0)
- 数据库-sql (2)
- highcharts-图表工具 (1)
- sql server 2008 (6)
- 诗词-工作室 (2)
- 数据割接 (1)
- GIS-地理信息系统 (2)
- RS-遥感技术 (1)
- GPS-全球定位系统 (1)
- java整合flex_RIA开发 (3)
- C#编程语言 (5)
- webservice_axis2_cxf_soap_wsdl (2)
- sql语句 (3)
- Flex_WebService_GIS (25)
- PHP编程语言 (0)
- ExtJS4.2 (1)
- Spring mvc (5)
- EasyUI1.4.2 (16)
- 日期时间工具类 (4)
- 随机数 (1)
- Arcgis api for js (0)
- Mysql数据库 (9)
- 移动互联网 java html5/flash socket netty (0)
- API接口 (1)
- AndroidStudio (0)
- Git (2)
- Maven (5)
- IDEA (0)
- 大数据-Hadoop (2)
- JPA (0)
- Spring boot (4)
- JSF (0)
- nginx_lua_module_redis (2)
- Activiti (1)
- bootstrap (1)
- AngularJS (10)
- 数据库-索引 (1)
- Linux及其连接工具SSH (4)
- java日志管理 (2)
- islider滑动控件 (1)
- jquery (1)
- 异常处理Exception (1)
- 秒杀与类秒杀系统 (1)
- 连接数据库、数据库连接池 (4)
- 数据库-临时表 (1)
- 软件设计模式-单例、多例、代理、工厂、观察者 (3)
- 集合框架 (5)
- 人工智能--Artificial intelligence、神经网络算法、机器学习 (1)
- 分布式应用 (1)
- SOA服务-Dubbo框架-Thrift框架 (2)
- Zookeeper分布式服务框架 (2)
- intellij idea (1)
- python编程语言 (0)
- 消息队列_MQ (0)
- 消息队列_RabbitMQ (2)
- 消息队列_ActiveMQ (1)
- 消息队列_Kafka (2)
- 缓存_Redis (4)
- 缓存_Memcache (0)
- 缓存_Ehcache (0)
- ivy-ivyde (1)
- google-protocol buffers (1)
- 正向代理-正向代理服务器 (1)
- 反向代理-反向代理服务器 (1)
- JVM内存模型 (0)
- Thunder框架 (1)
- NIO-非阻塞式IO (0)
- 软件测试、性能测试 (1)
- 序列化、Serializable接口、Externalizable接口 (3)
- 线程池-ExecutorService-ThreadPoolExecutor (1)
- web.xml (1)
- java开发-java工具-实用工具网站 (6)
- 医疗 (1)
- Filter-过滤器 (2)
- Unicode码-双字节字符编码 (1)
- OpenResty (1)
- 计算机网络 (1)
- eclipse_myeclipse_intellij idea (3)
- Enum (1)
- 大数据--Big Data (1)
- 云计算--Cloud computing (1)
- Elastic-Job (1)
- Redis (2)
- 文件流-IO操作 (6)
- 计算机基础知识 (1)
- Hessian-二进制RPC协议 (1)
- String类 (3)
- BigDecimal类 (1)
- java重要接口 (1)
- ReactJS (1)
- 跨域问题 (0)
- Map (1)
- 注解 (1)
- ASCII码-单字节字符编码 (1)
- 微服务、微服务架构 (2)
- RPC协议、RPC服务、RPC框架 (0)
- java反射 (1)
- java项目之classpath (1)
- 经典算法-树 (1)
- listener-监听器 (1)
- Interceptor-拦截器 (1)
- pojo javabean (2)
- 计算机科学与技术-进阶 (1)
- 代码规范与文档编写 (1)
- UML-统一建模语言 (1)
- 对接微信、支付宝 (3)
- 压力测试 (1)
- 办公软件-Excel (1)
- 办公软件-PPT (0)
- UTF8、GBK编码 (1)
- 微服务架构:Spring Cloud架构-Dubbo架构 (6)
- Nginx (1)
- 点滴业务 (1)
- form表单-json数据-转换与接口调用 (1)
- Junit单元测试 (1)
- 大数据-Spark (1)
- 大数据-Storm (1)
- 数据库事务-Spring事务 (0)
- elasticsearch (1)
- windows (1)
最新评论
1、优化前
2、优化后
-- ============================================= -- Author: <Author,,Name> -- Create date: <Create Date,,> -- Description: <Description,,> -- ============================================= ALTER PROCEDURE [dbo].[pro_demo] @type varchar(10), @stuId varchar(10), @stuNo VARCHAR(20), @tFlag varchar(1), @stuClassIds varchar(max) AS BEGIN SET NOCOUNT ON; -- 定义游标,编辑sql, 取得字段对应关系 DECLARE @TempStuSql VARCHAR(2000) DECLARE @StuSql VARCHAR(2000) --创建游标 DECLARE stuCursor CURSOR FOR SELECT TempStuField,StuField,StuType,isSchoolItem FROM UpgradeStuFieldDefine WHERE xType = @type AND xId = @stuId AND LOWER(TempStuField) != 'id' AND LOWER(StuField) != 'code' ORDER BY ID DESC --开启游标 OPEN stuCursor DECLARE @TempStuField VARCHAR(5000) DECLARE @StuField VARCHAR(100) DECLARE @StuType VARCHAR(1) DECLARE @isSchoolItem VARCHAR(1) SET @TempStuSql = '' SET @StuSql = '' --fetch row by row FETCH NEXT FROM stuCursor INTO @TempStuField,@StuField,@StuType,@isSchoolItem --eg: f2 gender 0 WHILE @@FETCH_STATUS = 0 BEGIN IF @isSchoolItem='0' SET @TempStuSql = '(select o.id from OptionItem o where o.itemName=tc.' +@TempStuField + ') as ' +@TempStuField + ',' + @TempStuSql ELSE SET @TempStuSql = 'tc.' +@TempStuField + ',' + @TempStuSql SET @StuSql = @StuField + ',' + @StuSql FETCH NEXT FROM stuCursor INTO @TempStuField,@StuField,@StuType,@isSchoolItem END --@TempStuField @StuField @StuType 每个变量每次只能保存一行数据对应的一条数据 --print @TempStuSql --print @StuSql --tc.f1,tc.f2,tc.f4,tc.f5,tc.f6, --sname,gender,mobile,address,email, CLOSE stuCursor DEALLOCATE stuCursor --释放游标 IF LEN(@TempStuSql) > 1 BEGIN SET @TempStuSql = SUBSTRING(@TempStuSql, 1, LEN(@TempStuSql) -1) SET @StuSql = SUBSTRING(@StuSql, 1, LEN(@StuSql) - 1) END --tc.f1,tc.f2,tc.f4,tc.f5,tc.f6 --sname,gender,mobile,address,email DECLARE @stuTable NVARCHAR(20) -- IF @StuType = 1 SET @stuTable = 'Astudent' ELSE SET @stuTable = 'Bstudent' IF LEN(@TempStuSql) > 1 BEGIN -- 定义执行sql DECLARE @insertSql NVARCHAR(max) DECLARE @valueSql NVARCHAR(max) DECLARE @sql NVARCHAR(max) IF @type = 0 -- 一类学生 BEGIN SET @insertSql = 'INSERT INTO ' + @stuTable + ' (id,Code,createTime,stuRefId,aStuType,aStuId,status,' + @StuSql + ') ' SET @valueSql = 'SELECT REPLACE(NEWID(),''-'',''''),'''',GETDATE(),tc.id,''' + @type + ''',''' + @stuId + ''', 1, ' + @TempStuSql + ' FROM TempCustomer tc LEFT JOIN Leads l ON l.TmpCustomerId = tc.id WHERE l.ActivityID = ' + @stuId + ' AND (tc.BatchNo = ''' + Isnull(@stuNo, '') + ''' OR ''' + Isnull(@stuNo, '') + ''' = '''') AND not exists ( SELECT 1 FROM t1 WHERE stuRefId = tc.id AND aStuType = ' + @type + ' AND aStuId = ' + @stuId + ' ) AND not exists ( SELECT 1 FROM t2 WHERE stuRefId = tc.id AND aStuType = ' + @type + ' AND aStuId = ' + @stuId + ' ) ' IF ISNULL(@tFlag, 1) = 0 --页面选择了学生id,直接升级选择的学生 SET @valueSql = @valueSql + 'AND tc.id IN (' + REPLACE(@stuClassIds,'@', ',') + ') ' SET @sql = @insertSql + @valueSql EXEC sp_executesql @sql END ELSE IF @type = 1 -- 二类学生 BEGIN SET @insertSql = 'INSERT INTO ' + @stuTable + ' (ID,Code,createTime,stuRefId,aStuType,aStuId,status,' + @StuSql + ') ' SET @valueSql = 'SELECT REPLACE(NEWID(),''-'',''''),'''',GETDATE(),tc.id,''' + @type + ''',''' + @stuId + ''', 1, ' + @TempStuSql + ' FROM t2_' + @stuId + ' tc WHERE (SYS_BatchId = ''' + Isnull(@stuNo, '') + ''' OR ''' + Isnull(@stuNo, '') + ''' = '''') AND not exists ( SELECT 1 FROM t1 WHERE stuRefId = tc.id AND aStuType = ' + @type + ' AND aStuId = ' + @stuId + ' ) AND not exists ( SELECT 1 FROM t2 WHERE stuRefId = tc.id AND aStuType = ' + @type + ' AND aStuId = ' + @stuId + ' ) ' IF ISNULL(@tFlag, 1) = 0 --页面选择了学生id,直接升级选择的学生 SET @valueSql = @valueSql + 'AND tc.id IN (' + REPLACE(@stuClassIds,'@', ',') + ') ' SET @sql = @insertSql + @valueSql EXEC sp_executesql @sql END END END
2、优化后
ALTER PROCEDURE [dbo].[pro_demo] @type varchar(10), @stuId varchar(10), @stuNo VARCHAR(20), @tFlag varchar(1), @stuClassIds varchar(max) AS BEGIN SET NOCOUNT ON; -- 定义游标,编辑sql, 取得字段对应关系 DECLARE @TempStuSql VARCHAR(2000) DECLARE @StuSql VARCHAR(2000) --create cursor DECLARE stuCursor CURSOR FOR SELECT TempCustomerField,CustomerField,CustomerType,IsOptionItem FROM UpgradeStuFieldDefine WHERE ActType = @type AND ActId = @stuId AND LOWER(TempCustomerField) != 'id' AND LOWER(CustomerField) != 'code' ORDER BY ID DESC --open cursor OPEN stuCursor DECLARE @TempCustomerField VARCHAR(5000) DECLARE @CustomerField VARCHAR(100) DECLARE @CustomerType VARCHAR(1) DECLARE @IsOptionItem VARCHAR(1) SET @TempStuSql = '' SET @StuSql = '' --fetch next from cursor FETCH NEXT FROM stuCursor INTO @TempCustomerField,@CustomerField,@CustomerType,@IsOptionItem WHILE @@FETCH_STATUS = 0 BEGIN SET @TempStuSql = 'tc.' +@TempCustomerField + ',' + @TempStuSql SET @StuSql = @CustomerField + ',' + @StuSql FETCH NEXT FROM stuCursor INTO @TempCustomerField,@CustomerField,@CustomerType,@IsOptionItem END --print '第1个打印' --print @TempStuSql --tc.f1,tc.f2,tc.f4,tc.f5,tc.f6, --print @StuSql --customername,gender,mobile,address,email, --close and deallocate cursor CLOSE stuCursor --@TempStuSql and @StuSql IF LEN(@TempStuSql) > 1 BEGIN SET @TempStuSql = SUBSTRING(@TempStuSql, 1, LEN(@TempStuSql) -1) SET @StuSql = SUBSTRING(@StuSql, 1, LEN(@StuSql) - 1) END --@customerTable DECLARE @customerTable NVARCHAR(20) IF @CustomerType = 1 SET @customerTable = 'Astudent' ELSE SET @customerTable = 'Bstudent' IF LEN(@TempStuSql) > 1 --main code #s BEGIN OPEN stuCursor DECLARE @sql NVARCHAR(max) --last sql DECLARE @insertSql NVARCHAR(max) --insert part DECLARE @valueSql NVARCHAR(max) --value part DECLARE @valueSql1 VARCHAR(2000) --START DECLARE @valueSql2 VARCHAR(2000) --DYNAMIC COLUMN DECLARE @valueSql3 VARCHAR(2000) --FROM DECLARE @valueSql4 VARCHAR(2000) --LEFT JOIN DECLARE @valueSql5 VARCHAR(2000) --END SET @valueSql2='' SET @valueSql4='' IF @type = 0 -- Ma学生 BEGIN SET @insertSql = 'INSERT INTO ' + @customerTable + ' (id,Code,createTime,upgradeCustomerRefId,upgradeActType,upgradeActId,status,' + @StuSql + ') ' SET @valueSql1='SELECT REPLACE(NEWID(),''-'',''''),'''',GETDATE(),tc.id,''' + @type + ''',''' + @stuId + ''', 1' SET @valueSql3=' FROM TempCustomer tc LEFT JOIN Leads l ON l.TmpCustomerId = tc.id ' SET @valueSql5=' WHERE l.ActivityID = ''' + @stuId + ''' AND (tc.BatchNo = ''' + Isnull(@stuNo, '') + ''' OR ''' + Isnull(@stuNo, '') + ''' = '''') AND not exists ( SELECT 1 FROM customer WHERE upgradeCustomerRefId = tc.id AND upgradeActType = ' + @type + ' AND upgradeActId = ' + @stuId + ') AND not exists ( SELECT 1 FROM company WHERE upgradeCustomerRefId = tc.id AND upgradeActType = ' + @type + ' AND upgradeActId = ' + @stuId + ') ' FETCH NEXT FROM stuCursor INTO @TempCustomerField,@CustomerField,@CustomerType,@IsOptionItem WHILE @@FETCH_STATUS = 0 BEGIN IF @IsOptionItem='1' BEGIN SET @valueSql2=','+@TempCustomerField+'.id'+@valueSql2 SET @valueSql4=@valueSql4+' left join OptionItem '+@TempCustomerField+' on tc.'+@TempCustomerField+'='+@TempCustomerField+'.itemName ' END ELSE SET @valueSql2=',tc.'+@TempCustomerField+@valueSql2 FETCH NEXT FROM stuCursor INTO @TempCustomerField,@CustomerField,@CustomerType,@IsOptionItem END CLOSE stuCursor DEALLOCATE stuCursor --print '打印left join==' --print @valueSql4 END ELSE IF @type = 1 -- Survey学生 BEGIN SET @insertSql = 'INSERT INTO ' + @customerTable + ' (ID,Code,createTime,upgradeCustomerRefId,upgradeActType,upgradeActId,status,' + @StuSql + ') ' SET @valueSql1='SELECT REPLACE(NEWID(),''-'',''''),'''',GETDATE(),tc.id,''' + @type + ''',''' + @stuId + ''', 1' SET @valueSql3=' FROM T1_' + @stuId + ' tc ' SET @valueSql5=' WHERE (SYS_BatchId = ''' + Isnull(@stuNo, '') + ''' OR ''' + Isnull(@stuNo, '') + ''' = '''') AND not exists ( SELECT 1 FROM T1 WHERE upgradeCustomerRefId = tc.id AND upgradeActType = ' + @type + ' AND upgradeActId = ' + @stuId + ') AND not exists ( SELECT 1 FROM T2 WHERE upgradeCustomerRefId = tc.id AND upgradeActType = ' + @type + ' AND upgradeActId = ' + @stuId + ') ' FETCH NEXT FROM stuCursor INTO @TempCustomerField,@CustomerField,@CustomerType,@IsOptionItem WHILE @@FETCH_STATUS = 0 BEGIN IF @IsOptionItem='1' BEGIN SET @valueSql2=','+@TempCustomerField+'.id'+@valueSql2 SET @valueSql4=@valueSql4+' left join OptionItem '+@TempCustomerField+' on tc.'+@TempCustomerField+'='+@TempCustomerField+'.itemName ' END ELSE SET @valueSql2=',tc.'+@TempCustomerField+@valueSql2 FETCH NEXT FROM stuCursor INTO @TempCustomerField,@CustomerField,@CustomerType,@IsOptionItem END CLOSE stuCursor DEALLOCATE stuCursor END IF LEN(@valueSql4)>1 SET @valueSql=@valueSql1+@valueSql2+@valueSql3+@valueSql4+@valueSql5 --@valueSql ELSE SET @valueSql=@valueSql1+@valueSql2+@valueSql3+@valueSql5 IF ISNULL(@tFlag, 1) = 0 --页面选择了学生id,直接升级选择的学生 SET @valueSql = @valueSql + 'AND tc.id IN (' + REPLACE(@stuClassIds,'@', ',') + ') ' --@valueSql SET @sql = @insertSql + @valueSql --print '打印' --print @sql EXEC sp_executesql @sql END --main code #e END
相关推荐
根据提供的文件信息,本文将详细解释如何通过 SQL 语句实现按照某一字段去重后获取所有字段的操作。在实际工作中,我们经常会遇到需要对数据表中的记录进行去重的情况,尤其是当某个字段作为唯一标识符时,我们希望...
此外,如果存储过程中引用了源数据库特有的对象(如表、视图或函数),在导入到新环境中时可能需要调整依赖关系。 在实际应用中,存储过程的导出和导入非常实用,例如在数据库迁移、备份恢复、开发测试和版本控制等...
总之,"sqlserver2sqlite_converter"这个工具为那些需要将数据从SQL Server迁移到SQLite的用户提供了便利。它简化了两个不同数据库系统之间的数据迁移过程,帮助用户快速适应不同的数据库环境。在实际使用中,用户应...
sqlserver 快速查询存储过程或者视图中是否用到某个表或者字段。
这个压缩包文件"Excel导入SQLserver源码_excel2sql.zip"很可能包含了一个程序或脚本,用于自动化从Excel文件批量导入数据到SQL Server的过程。通常,这样的工具会使用编程语言如Python、C#、VB.NET或PowerShell来...
### SQL Server导出表到Excel文件的存储过程详解 #### 标题理解: - **标题内容**:“SQL Server导出表到EXCEL文件的存储过程” - **标题解读**:此标题表明文章将介绍一种在SQL Server环境中使用的存储过程,该...
以上内容主要介绍了 SQL Server 中存储过程中的一些基本语法和操作方法,包括变量定义及赋值、表和临时表的操作、循环以及条件语句等,这些知识点对于理解和使用 SQL Server 存储过程至关重要。
首先,导入Excel数据到SQL Server通常有几种方法:使用SQL Server Management Studio (SSMS) 的“导入和导出数据”向导、T-SQL语句(如BULK INSERT或OPENROWSET函数)以及编写存储过程。标题提到的“通过自动编写...
7. **导入与导出数据:** 支持从多种数据源导入数据到SQL Server,也可以将数据导出到其他格式,如Excel、CSV等。 8. **报表服务:** 尽管SSMSEE不包含完整版的SQL Server Reporting Services,但依然可以创建和...
Sql Server 删除所有表数据语句 Sql Server 是一种关系型数据库管理系统,广泛应用于企业级应用程序中。在实际开发和测试中,我们常常需要删除数据库中的所有表数据,而保持表结构不变。下面我们将介绍如何使用一条...
1. **数据迁移**:数据迁移是将数据从一个数据库系统转移到另一个数据库系统的过程。在这个过程中,我们需要确保数据的一致性、完整性和兼容性。SQL Server到SQLite的迁移涉及了结构和数据的转换。 2. **数据库结构...
本文将详细介绍如何使用 SQL Server Management Studio 将 Excel 文件中的数据导入到 SQL Server 数据库中。 为什么需要导入数据 在实际应用中,数据可能来自各种来源,如 Excel 文件、CSV 文件、文本文件等。将...
Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_Mysql_Sqlserver字段类型转换参考Oracle_...
本文将通过一系列示例来详细介绍如何在SQL Server中实现数据去重。 #### 二、基本概念 在SQL Server中,去重通常指的是从表中删除重复的数据行。这里所说的“重复”是指表中的某些字段或组合字段的值完全相同的...
功能: 根据表名、where条件,生成导出数据的SQL语句。(包含insert语句。结果可一键执行,利于数据导出、导入) 参数: @tableName nvarchar(100) --表名 ,@sqlWhere nvarchar(500) --where条件,如'a=''123'' '(传...
【SQL Server 2016】中导入EXCEL 2013表数据的方法 在SQL Server 2016中,有多种方法可以将EXCEL 2013的数据导入到数据库中,主要包括以下三种: 1. **SQL Server Management Studio (SSMS) 中导入** - 首先,...
本主题聚焦于如何将DBF(dBase文件格式)导入到SQL Server数据库,并将数据导出至本地Excel。DBF是一种早期的数据库文件格式,常用于FoxPro、dBase等系统,而SQL Server是微软提供的一个强大、可靠的关系型数据库...
2. **导出表结构**:在SQL Server中,可以使用`sp_help`系统存储过程或`information_schema`视图来获取表的结构信息,包括表名、字段名、数据类型、是否为主键等。`sp_help 'tableName'`将显示关于特定表的所有信息...
SQL Server 删除重复数据 SQL Server 删除重复数据是数据库管理中的一项重要任务。重复数据可能是完全重复的记录,也可能是部分关键字段重复的记录。删除重复数据可以使用多种方法,包括使用 SELECT DISTINCT 语句...
sqlserver 根据字段内容,查询表和列名字 sqlserver 根据字段内容,查询表和列名字 sqlserver 根据字段内容,查询表和列名字 sqlserver 根据字段内容,查询表和列名字 sqlserver 根据字段内容,查询表和列名字