分享:sp_table_copy 根据旧表创建新表,并去掉IDENTITY属性。

本文介绍了一个SQL脚本,用于创建并复制数据库表,包括检查表是否存在、验证参数、选择列并生成相应的SQL命令。
USE master
go 

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
IF OBJECT_ID('sp_table_copy','P') IS NOT NULL 
DROP PROC sp_table_copy
go 
CREATE PROCEDURE sp_table_copy
    (
      @table NVARCHAR(128) ,
      @table_new NVARCHAR(128),
      @is_identity CHAR(1) = 'N' 
    )
AS 
    IF OBJECT_ID(@table, 'U') IS NULL 
        BEGIN 
            SELECT  '不存在表:' + @table AS return_result 
            RETURN
        END 
    IF @is_identity NOT IN ('Y','N')
        BEGIN 
            SELECT  '@is_identity:只能是Y或N'   AS return_result 
            RETURN
        END 
    DECLARE @sql NVARCHAR(MAX)
    SET @sql = ' SELECT TOP (0) '
    IF @is_identity = 'N'
    SET @sql = @sql
        + STUFF(( SELECT    ',' + ( CASE WHEN is_identity = 1 THEN ' 0 + ' + name + ' AS ' + name + '' ELSE '' + name + '' END )
                  FROM      sys.columns
                  WHERE     object_id = OBJECT_ID(@table, 'U')
                FOR
                  XML PATH('')
                ), 1, 1, '') + CHAR(13) + CHAR(10) + ' INTO ' + @table_new + CHAR(13) + CHAR(10) + 
                ' FROM ' + @table + ''
                    ELSE  
        SET @sql = @sql
        + STUFF(( SELECT    ',' + '' + name + '' 
                  FROM      sys.columns
                  WHERE     object_id = OBJECT_ID(@table, 'U')
                FOR
                  XML PATH('')
                ), 1, 1, '') + CHAR(13) + CHAR(10) + ' INTO ' + @table_new + CHAR(13) + CHAR(10) + 
                ' FROM ' + @table + ''
                          
    PRINT @sql 
    IF object_id(@table_new,'U') IS NULL 
    EXEC sp_executesql @sql 
	
GO
EXEC sp_MS_marksystemobject 'sp_table_copy'

do LANGUAGE plpgsql $$ DECLARE V_SP_NAME nvarchar2(100) := '002_truncateTables_dml.sql'; V_LOG_PARAMS FND_LOG_PARAMS_TYP; V_ERROR_MSG nvarchar2(3000); V_IS_OK BOOL; V_CNT NUMERIC; V_ROW_COUNT NUMERIC; V_SQL TEXT :=''; V_CUR RECORD; v_table int4; BEGIN V_IS_OK := TRUE; BEGIN V_LOG_PARAMS := FND_INIT_LOG_PARAM_F(V_SP_NAME,'1','1',1); V_LOG_PARAMS.STEP_START_TIME := CLOCK_TIMESTAMP(); V_LOG_PARAMS.PROCESS_STEP_ID := V_LOG_PARAMS.PROCESS_STEP_ID + 1; V_LOG_PARAMS.LOG_MESSAGE := V_SP_NAME||' begin'; PERFORM FND_START_LOG_P(V_LOG_PARAMS); set app.current_tenant = 113704385416306; table_names VARCHAR[] := ARRAY[ 'fii.demo_copy1', 'fii.ssage_t1' ]; -- 替换为目标名列 full_table_name VARCHAR; schema_part VARCHAR; table_part VARCHAR; table_exists BOOLEAN; BEGIN FOREACH full_table_name IN ARRAY table_names LOOP -- 分离模式名和名 schema_part := split_part(full_table_name, '.', 1); table_part := split_part(full_table_name, '.', 2); -- 检查是否存在 SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE schemaname = schema_part AND tablename = table_part ) INTO table_exists; -- 获取存在标志[^1] -- 根据存在标志处理 IF table_exists THEN EXECUTE FORMAT('TRUNCATE TABLE %I.%I', schema_part, table_part); -- 安全执行清空 -- RAISE NOTICE 'table %.% 已清空', schema_part, table_part; END IF; END LOOP; EXCEPTION WHEN OTHERS THEN V_IS_OK := FALSE; V_ERROR_MSG := SUBSTR(SQLERRM, 1, 300); V_LOG_PARAMS.PROCESS_STEP_ID := V_LOG_PARAMS.PROCESS_STEP_ID + 1; V_LOG_PARAMS.LOG_MESSAGE := V_ERROR_MSG; PERFORM FND_EXCEPT_LOG_P(V_LOG_PARAMS); RETURN; END; IF V_IS_OK THEN COMMIT; END IF; V_IS_OK := TRUE; IF V_IS_OK THEN GET DIAGNOSTICS V_ROW_COUNT := ROW_COUNT; V_LOG_PARAMS.STEP_TYPE := 'END'; --V_LOG_PARAMS.DML_TYPE := 'ALL'; V_LOG_PARAMS.PROCESS_STEP_ID := V_LOG_PARAMS.PROCESS_STEP_ID + 1; V_LOG_PARAMS.DML_ROW_COUNT := V_ROW_COUNT; V_LOG_PARAMS.DATA_COMPONENT_NAME := V_SP_NAME; V_LOG_PARAMS.LOG_MESSAGE := V_SP_NAME||' end'; PERFORM FND_STEP_LOG_P(V_LOG_PARAMS, 2); COMMIT; END IF; end; $$ 需求是当数组中的存在则清空内容
09-20
openguass数据库public static final String IDATA_QUERY_ALL_AREA_URL = "App.Intergration.area.all"; public static final String IDATA_QUERY_ALL_DEPARTMENT_URL = "App.Intergration.organization.all"; /* * Copyright (c) Huawei Technologies Co., Ltd. 2025-2025. All rights reserved. */ -- Description: 清空 -- Author: cwx1445721 -- Version: 20250930 do LANGUAGE plpgsql $$ DECLARE V_SP_NAME nvarchar2(100) := '002_truncateTables_dml.sql'; V_LOG_PARAMS FND_LOG_PARAMS_TYP; V_ERROR_MSG nvarchar2(3000); V_IS_OK BOOL; V_CNT NUMERIC; V_ROW_COUNT NUMERIC; V_SQL TEXT :=''; V_CUR RECORD; v_table int4; BEGIN V_IS_OK := TRUE; BEGIN V_LOG_PARAMS := FND_INIT_LOG_PARAM_F(V_SP_NAME,'1','1',1); V_LOG_PARAMS.STEP_START_TIME := CLOCK_TIMESTAMP(); V_LOG_PARAMS.PROCESS_STEP_ID := V_LOG_PARAMS.PROCESS_STEP_ID + 1; V_LOG_PARAMS.LOG_MESSAGE := V_SP_NAME||' begin'; PERFORM FND_START_LOG_P(V_LOG_PARAMS); set app.current_tenant = 113704385416306; table_names VARCHAR[] := ARRAY[ 'fii.faai_apn_t' ]; -- 替换为目标名列 full_table_name VARCHAR; schema_part VARCHAR; table_part VARCHAR; table_exists BOOLEAN; BEGIN FOREACH full_table_name IN ARRAY table_names LOOP -- 分离模式名和名 schema_part := split_part(full_table_name, '.', 1); table_part := split_part(full_table_name, '.', 2); -- 检查是否存在 SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE schemaname = schema_part AND tablename = table_part ) INTO table_exists; -- 获取存在标志[^1] -- 根据存在标志处理 IF table_exists THEN EXECUTE FORMAT('TRUNCATE TABLE %I.%I', schema_part, table_part); -- 安全执行清空 -- RAISE NOTICE 'table %.% 已清空', schema_part, table_part; END IF; END LOOP; EXCEPTION WHEN OTHERS THEN V_IS_OK := FALSE; V_ERROR_MSG := SUBSTR(SQLERRM, 1, 300); V_LOG_PARAMS.PROCESS_STEP_ID := V_LOG_PARAMS.PROCESS_STEP_ID + 1; V_LOG_PARAMS.LOG_MESSAGE := V_ERROR_MSG; PERFORM FND_EXCEPT_LOG_P(V_LOG_PARAMS); RETURN; END; IF V_IS_OK THEN COMMIT; END IF; V_IS_OK := TRUE; IF V_IS_OK THEN GET DIAGNOSTICS V_ROW_COUNT := ROW_COUNT; V_LOG_PARAMS.STEP_TYPE := 'END'; --V_LOG_PARAMS.DML_TYPE := 'ALL'; V_LOG_PARAMS.PROCESS_STEP_ID := V_LOG_PARAMS.PROCESS_STEP_ID + 1; V_LOG_PARAMS.DML_ROW_COUNT := V_ROW_COUNT; V_LOG_PARAMS.DATA_COMPONENT_NAME := V_SP_NAME; V_LOG_PARAMS.LOG_MESSAGE := V_SP_NAME||' end'; PERFORM FND_STEP_LOG_P(V_LOG_PARAMS, 2); COMMIT; END IF; end; $$此sql想要实现若数据库存在数组中的名则将对应的清空,修正sql,使这个sql能够实现功能
09-20
内容概要:本文介绍了一种基于蒙特卡洛模拟和拉格朗日优化方法的电动汽车充电站有序充电调度策略,重点针对分时电价机制下的分散式优化问题。通过Matlab代码实现,构建了考虑用户充电需求、电网负荷平衡及电价波动的数学模【电动汽车充电站有序充电调度的分散式优化】基于蒙特卡诺和拉格朗日的电动汽车优化调度(分时电价调度)(Matlab代码实现)型,采用拉格朗日乘子法处理约束条件,结合蒙特卡洛方法模拟大量电动汽车的随机充电行为,实现对充电功率和时间的优化分配,旨在降低用户充电成本、平抑电网峰谷差提升充电站运营效率。该方法体现了智能优化算法在电力系统调度中的实际应用价值。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事能源汽车、智能电网相关领域的工程技术人员。; 使用场景及目标:①研究电动汽车有序充电调度策略的设计与仿真;②学习蒙特卡洛模拟与拉格朗日优化在能源系统中的联合应用;③掌握基于分时电价的需求响应优化建模方法;④为微电网、充电站运营管理提供技术支持和决策参考。; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注目标函数构建、约束条件处理及优化求解过程,可尝试调整参数设置以观察不同场景下的调度效果,进一步拓展至多目标优化或多类型负荷协调调度的研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值