Sql Server A表汇总到B表存储过程(直接赋参数用,源码)
2023-09-11 14:15:10 时间
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- <><><><><><><><><><><><><>
-- <> <>
-- <> A表汇总到B表 <>
-- <> <>
-- <><><><><><><><><><><><><>
Create PROCEDURE [dbo].[类_A表汇总到B表]
@Sql_Table varchar(30) = 'Fm_MonthEnd', -- 表名称
@Sql_TempTable varchar(30) = 'Fm_MonthEnd', -- 目标表
@Sql_Field varchar(500) = 'AddInVentory', -- 显示表字段
@Sql_Where varchar(500) = '(Deleted=0 or deleted is null)', -- 表条件
@Sql_Order varchar(100) = 'order by AddInVentory', -- 排序方式
@Sql_TotalField varchar(500) = 'AddInVentory' -- 汇总项字段
As
BEGIN
SET NOCOUNT ON;
-- ╔════════╗
-- ================================================================================= ║ 定义默认变量 ║
-- ╚════════╝
declare @Sql_Sql nvarchar(2000) -- Sql执行语句
set @Sql_Sql = '' -- Sql执行语句
declare @Sql_Temp nvarchar(1000) -- Sql执行语句
set @Sql_Temp = '' -- Sql执行语句
declare @temp_1 varchar(1000) -- 空字段变量
set @temp_1=''
declare @sql_count int -- 出现次数
set @sql_count=0
-- ╔════════╗
-- ================================================================================= ║ 执 行 程 序 ║
-- ╚════════╝
-- ★★★ 开始循环取出字段
set @Sql_Field =@Sql_Field+','
set @temp_1=SUBSTRING(@Sql_Field,1,CHARINDEX(',',@Sql_Field)-1) -- 第一个值
while @sql_count<200
begin
-- ==================================================================== // 【循环内代码】赋值关联表 @sql_TempField
if CHARINDEX(upper(@temp_1),upper(@Sql_TotalField))>0 -- 判断[汇总字段]还是[显示字段]
begin
set @Sql_Temp=@Sql_Temp+'Sum('+@temp_1+') as '+ @temp_1+','
end
else
begin
set @Sql_Temp=@Sql_Temp+'Max('+@temp_1+') as '+ @temp_1+','
end
-- ==================================================================== // 【循环结束取值】
set @Sql_Field=RTRIM(LTRIM((SUBSTRING(@Sql_Field,CHARINDEX(',',@Sql_Field)+1,1000)))) -- 截去已用过
-- 如果取完了,退出
if CHARINDEX(',',@Sql_Field)=0
begin
break
end
-- 一个一个的取值
set @temp_1=RTRIM(LTRIM((SUBSTRING(@Sql_Field,1,CHARINDEX(',',@Sql_Field)-1))))
End
set @Sql_Temp=SUBSTRING(@Sql_Temp,1,len(@Sql_Temp)-1)
--print @Sql_Temp -- 显示字符串结果
-- ★★★ 判断是否有生成表名
-- 删除生成的临时表
exec 类_删除表 @Sql_TempTable
-- ★★★ 组合sql语句
set @Sql_Sql='Select top 10000000 '+@Sql_Temp+' From '+@Sql_Table+' where '+@Sql_Where+' group by '+@Sql_Order--+' order by '+@Sql_Order
set @Sql_Sql='select top 10000000 * into '+@Sql_TempTable+' from ('+@Sql_Sql+') a'
print @Sql_Sql
EXEC (@Sql_Sql)
END
相关文章
- Sql server在另一台服务器,在Visual Studio 中没问题,IIS中 提示“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。。。。”
- is-a,has-a,like-a是什么 sql server中,N''表示什么意思? 关于SQL SERVER的N前缀的理解
- com.sun.xml.internal.ws.server.ServerRtException: Server Runtime Error: java.net.BindException: Cannot assign requested address: bind
- sql server 小技巧(3) SQL Server 2012 数据库完整导出到SQL Azure (包括数据)
- ArcGIS Server的Tile的松散型存储(Exploded)
- (4.52)解决sql server动态SQL中对表字段操作时需要频繁 ISNULL的问题
- sql server作业报错:从ICassFactory为CLSID为{17BCA6E8-A950-497E-B2F9-AF6AA475916F}的COM组件创建实例失败,原因是出现以下错误:c001f011.(Microsoft.Server.manageDTS)
- sql server代理服务无法启动(SQL Agent):OpenSQLServerInstanceRegKey:GetRegKeyAccessMask failed (reason: 2).
- sql server存储引擎启动错误(SQL Server could not spawn FRunCM thread)
- 最小配置启动SQL SERVER,更改SQL Server最大内存大小导致不能启动的解决方法
- 【sql server复制】数据库复制:修改表结构、新增表、新增存储过程 会被复制到订阅服务器?
- 【sql server复制】教你使用SQL SERVER复制
- (2.2)sql server函数,sql server自定义函数/表值函数与存储过程
- SQL Server中用Case When Then多条件判断sql
- Tomcat启动失败错误解决Could not publish server configuration for Tomcat v7.0 Server at localhost