SQL[游标+动态SQL+表函数]返回指定表名的某行的所有列合并后的值,主要提供给数据库表的更新记录事件


Create PROCEDURE [dbo].[SysGetTableFieldsCombine] 

-- =============================================
-- Description:    <返回指定表名的某行的所有列合并后的值,主要提供给数据库表的更新记录事件>
-- Return 0- 成功, -1- 没有这个表
-- Rev: 1.00
-- =============================================
@ObjectName Nvarchar(100) ='',
@ObjectPKId char(12)='',
@CombineFieldsValue nvarchar(max) ='' output 

AS

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

--判断表名是否存在
if object_id(@ObjectName) is null
    return -1

--定义一个内存表,用来获取该表的所有字段清单
declare @tempFields table(ObjectColumnName nvarchar(100),ObjectColumnType nvarchar(100))

insert  into  @tempFields 
        SELECT     c.name AS ObjectColumnName,t.name AS ObjectColumnType
        FROM       sys.syscolumns AS c INNER JOIN
                   sys.systypes AS t ON c.xusertype = t.xusertype
        WHERE     (id = Object_Id(@ObjectName))
        ORDER BY colorder

--定义游标,开始拼接一个SQL查询字串
declare @SQLString nvarchar(max)
declare @ObjectColumnName nvarchar(100)
declare @PKFieldName nvarchar(100)
declare @CombineField nvarchar(200)
declare @Paramstring nvarchar(100)
declare @ObjectColumnType nvarchar(100)

set @SQLString='select @CField='
set @PKFieldName=''

DECLARE   My_cursor   CURSOR   FOR  SELECT   --定义一个游标
                ObjectColumnName,ObjectColumnType FROM   @tempFields 

    OPEN   My_cursor      
    FETCH   NEXT   FROM   My_cursor INTO
                 @ObjectColumnName,@ObjectColumnType

    WHILE @@fetch_status = 0 
    begin
        IF @@fetch_status = -2
        CONTINUE

        if @ObjectColumnType<>'varbinary' and @ObjectColumnType<>'uniqueidentifier'
            and @ObjectColumnType<>'timestamp' and @ObjectColumnType<>'image'
            and @ObjectColumnType<>'binary'
        begin
            set @CombineField=''    
            IF @ObjectColumnType <> 'datetime' 
                SET @CombineField=''' ['+@ObjectColumnName+']''+rtrim(convert(nvarchar,isnull(convert(nvarchar,' + @ObjectColumnName + '),'''')))'         
            ELSE
                SET @CombineField=''' ['+@ObjectColumnName+']''+rtrim(convert(nvarchar,isnull(convert(nvarchar,' + @ObjectColumnName + ',121),'''')))' 
                
                    
            if @PKFieldName=''  
            begin
                set @SQLString=@SQLString+    @CombineField
            end
            else
            begin
                set @SQLString=@SQLString+ '+'+ @CombineField    
            end

            if @PKFieldName=''   --获取主PK字段的名称
                set @PKFieldName=@ObjectColumnName
        end

        FETCH NEXT FROM My_cursor  INTO 
                @ObjectColumnName,@ObjectColumnType
    end

DEALLOCATE My_cursor  

set @SQLString=@SQLString+'  from '+ @ObjectName+ ' where ' + @PKFieldName + ' =''' + @ObjectPKId + ''''
set @Paramstring='@CField nvarchar(max) output'

--动态执行SQL,同时从内部返回变量
EXECUTE sp_executesql @SQLString,@Paramstring,@CField=@CombineFieldsValue output

return 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAD notes

ESKF 总结 prediction 更新误差先验 F F F通过3.42来算 得到 这里有点绕的一点是: 误差状态的 F F F牵涉到名义状态, 而名义状态又需要在时间上推进更新 其中, F中的名义状态的推进通过公式3.41得到, (名义状态不考虑误差, 这一点从3.41d, 3.41e可以看出, 误差状态只考虑…

React-Redux总结含购物车案例

React-Redux总结含购物车案例 reduc简介 redux是react全家桶的一员&#xff0c;它为react给i共可预测化的状态管理机制。redux是将整个应用状态存储到一个地方&#xff0c;成为store,里面存放着一颗树状态(state,tree),组件可以派发dispatch行为action给store,而不是直接通知其…

Spring Authorization Server 1.1 扩展 OAuth2 密码模式与 Spring Cloud Gateway 整合实战

目录 前言无图无真相创建数据库授权服务器maven 依赖application.yml授权服务器配置AuthorizationServierConfigDefaultSecutiryConfig 密码模式扩展PasswordAuthenticationTokenPasswordAuthenticationConverterPasswordAuthenticationProvider JWT 自定义字段自定义认证响应认…

SpringCloud 微服务全栈体系(四)

第六章 Nacos 配置管理 Nacos 除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 一、统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我们需要一种统一配置管理方案…

ubuntu执行普通用户或root用户执行apt-get update时报错Couldn‘t create temporary file /tmp/...

apt-get update无法更新&#xff0c;报错&#xff1a; Couldnt create temporary file /tmp/apt.conf.GSzv74 for passing config to&#xff0c;&#xff0c;&#xff0c; 这是由于/tmp目录没有权限导致的&#xff0c;解决办法&#xff1a; chmod 777 /tmp

MySQL外键,表与表的关系,多表查询,Navicat软件

外键 MySQL可以使用外键来保持表之间的关系完整性。 要设置外键&#xff0c;可以按照以下步骤进行操作&#xff1a; 在创建表时&#xff0c;使用FOREIGN KEY关键字来指定外键列&#xff1a; CREATE TABLE table1 (id INT PRIMARY KEY,name VARCHAR(50),table2_id INT,FOREI…

Redis 配置文件(redis.conf)中文注释及说明

文章目录 一、概述二、觉见基础配置1.1 导入另一个配置文件1.2 添加Redis扩展1.3 绑定Redis服务在那些网卡上&#xff0c;也就是远程可以通过那个的IP地址访问。1.2 指定Redis服务监听端口1.2 最大分配内容大小1.2 后台服务方式运行1.2 日志记录文件1.2 添加扩展 三、完整配置文…

优化AIDL回调接口调用代码

RemoteCallbackList 是 Android 中的一个类&#xff0c;用于管理跨进程的回调接口。它提供了一种安全和高效的方式来管理多个回调对象&#xff0c;并避免因为进程间通信 (IPC) 导致的内存泄漏问题。RemoteCallbackList 的主要作用是在客户端和服务端之间传递回调对象&#xff0…

Photoshop(PS)安装教程(图文教程超详细)

目录 一.简介 二.安装步骤 软件&#xff1a;PS版本&#xff1a;2023语言&#xff1a;简体中文大小&#xff1a;3.20G系统要求&#xff1a;Win10&#xff08;1903&#xff09;及以上版本&#xff0c;64位操作系统硬件要求&#xff1a;CPU2.0GHz 内存8G(或更高&#xff0c;不支…

Open3D(C++) 最小二乘拟合平面(直接求解法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 平面方程的一般表达式为: A x + B y + C

力扣每日一题74:搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…

Zabbix安装与部署

前言 Zabbix是一个开源的网络监控和系统监控解决方案&#xff0c;用于监控服务器、网络设备、应用程序和服务。它基于客户端-服务器体系结构&#xff0c;使用多种监控选项来监控不同类型的设备和应用程序。Zabbix支持数据收集、处理和存储&#xff0c;以及报警和可视化等功能。…

科技资讯|苹果穿戴新专利,表带、服装等织物可变身柔性屏幕或扬声器

根据美国商标和专利局&#xff08;USPTO&#xff09;本周公示的清单&#xff0c;苹果公司获得了一项新的技术专利&#xff0c;可以在 Apple Watch 表带、服装等物品上&#xff0c;引入基于织物的柔性扬声器。 根据专利描述&#xff0c;通过在织物中嵌入声学组件&#xff08;例…

React-hooks有哪些用法?

React Hooks 是 React 16.8 引入的一种新的特性,用于在函数组件中使用状态和其他 React 特性。下面列举了一些常见的 React Hooks 的用法: 1:useState:用于在函数组件中添加状态。: import React, { useState } from react;function MyComponent() {const [count, setCou…

【Linux】CentOS8.4 安装docker

&#x1f984; &#x1f390;个人主页 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; 感谢点赞和关注 &#xff0c;每天进步一点点&#xff01;加油&#xff01;&#x1fa81;&#x1f341;&#x1fa81;&…

C++模版进阶

一、非类型模版参数 之前学习的模版&#xff0c;参数一般是某种类型&#xff0c;但其实非类型的参数也可以定义在模版里面&#xff0c;但也有一定的限制&#xff0c;只可以定义整形家族的参数&#xff0c;而且具有常量性 注意&#xff1a; 1. 浮点数、类对象以及字符串是不允…

Spring Boot 为什么会出现 ?

Spring Boot出现的背景和原因有以下几个方面&#xff1a; 简化Spring应用的开发和部署&#xff1a;Spring Framework 是一个功能强大但相对复杂的框架&#xff0c;它需要进行繁琐的配置和设置。Spring Boot的目标之一是简化Spring应用的开发过程&#xff0c;减少开发的工作量&a…

达芬奇MacOS最新中文版 DaVinci Resolve Studio 18中文注册秘钥

DaVinci Resolve Studio 18是一款专业的视频编辑软件&#xff0c;它具有多种强大的功能。首先&#xff0c;它提供了丰富的视频剪辑工具&#xff0c;如剪切、复制、粘贴、剪辑、缩放和移动等&#xff0c;使用户可以轻松地剪辑和组合视频素材。其次&#xff0c;该软件还支持多个轨…

数据结构:二叉搜索树

目录 1、二叉搜索树概念 2、 二叉搜索树的插入 3、二叉搜索树的查找 4、二叉搜索树的删除 5、二叉搜索树的中序遍历 实现 1、二叉搜索树概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树 &#xff0c;或者是具有以下性质的二叉树 : 若它的左子树不为空&#…

Python第三方库 - Flask(python web框架)

1 Flask 1.1 认识Flask Web Application Framework&#xff08; Web 应用程序框架&#xff09;或简单的 Web Framework&#xff08; Web 框架&#xff09;表示一个库和模块的集合&#xff0c;使 Web 应用程序开发人员能够编写应用程序&#xff0c;而不必担心协议&#xff0c;线…