Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >insert查询中使用的计数器函数

insert查询中使用的计数器函数
EN

Stack Overflow用户
提问于 2014-05-13 15:04:33
回答 1查看 77关注 0票数 0

我需要使用一个函数对一个表进行插入。我所做的是:

代码语言:javascript
运行
AI代码解释
复制
UPDATE  MyTable SET MyColumn = dbo.fncGetMyValue(MyParameter) where //some logic

当然,这里的MyParameter是MyTable中的一个列。问题是,只要我更新一行,函数的值就应该改变,因为它实际上是MyParemeter的计数器函数。但是查询会为它更新的每一行插入函数的第一个相同的结果。我是说,它应该更新15,16,17...每一行,但它会更新15,15,15,...我想这是正常的,因为sql在插入过程结束之前看不到插入的值。

我的问题是,是否有一种方法可以在不使用while语句的情况下解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2014-05-14 22:57:51

好的,你在细节上相当节俭,所以我不得不猜测你的一些逻辑,但如果我遵循你的逻辑,你的函数获得最好的记录+ 1,你应该仍然能够以基于集合的方式做到这一点:

首先,我将使用SELECT来解释,实际上,您遇到的问题是MaxRecord +1对于所有行都是相同的,就像下面的SELECT一样:

代码语言:javascript
运行
AI代码解释
复制
SELECT  t.ID,
        t.MyColumn,
        t.MyParamter,
        MaxRecord = MaxT.MyColumn + 1
FROM    MyTable AS t
        INNER JOIN
        (   SELECT  MyParameter, MyColumn = MAX(MyColumn)
            FROM    MyTable
            WHERE   SomeLogic
            GROUP BY MyParamter
        ) AS MaxT
            ON MaxT.MyParamter = t.MyParamter
WHERE   SomeLogic;

您可以通过删除+1并添加ROW_NUMBER()来避免此问题:

代码语言:javascript
运行
AI代码解释
复制
MaxRecord = MaxT.MyColumn + ROW_NUMBER() OVER(PARTITION BY t.MyParameter ORDER BY t.ID)

最后,您还可以使用分析函数删除子查询,因此您的最终select将是:

代码语言:javascript
运行
AI代码解释
复制
SELECT  t.ID,
        t.MyParameter,
        t.MyColumn,
        MyNewColumn = MAX(t,MyColumn) OVER(PARTITION BY t.MyParameter) +
                        ROW_NUMBER() OVER(PARTITION BY t.MyParameter
                                            ORDER BY t.ID)
FROM    MyTable t
WHERE   SomeLogic;

然后,要进行更新,您可以将所有这些都包装在一个CTE中,然后更新它:

代码语言:javascript
运行
AI代码解释
复制
WITH CTE AS
(   SELECT  t.ID,
            t.MyParameter,
            t.MyColumn,
            MyNewColumn = MAX(t,MyColumn) OVER(PARTITION BY t.MyParameter) +
                            ROW_NUMBER() OVER(PARTITION BY t.MyParameter
                                                ORDER BY t.ID)
    FROM    MyTable t
    WHERE   SomeLogic
)
UPDATE  CTE
SET     MyColumn = MyNewColumn;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23634939

复制
相关文章
MTCNN人脸检测 附完整C++代码
Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Neural Networks
cpuimage
2018/05/07
4.5K8
MTCNN人脸检测 附完整C++代码
记录C++遗忘项
extern那些事 extern "C" 是放在.cpp文件中,而不是放在.c中,不然会有编译错误。放在.c的情况都是加上了#ifdef __cplusplus#endif即用来识别当前文件用C++进行编译,所以才不会报错。 static那些事 静态成员变量未赋值的存放在bss段,赋值过就放在data段. 类的静态数据成员如成员函数或者成员变量,不依赖于类对象本身,即类中的静态数据成员由对象共享。因此静态变量不能使用构造函数初始化;静态函数仅能访问静态数据或静态成员函数。 静态类对象和静态对象(变量)一样,
Rock_Lee
2021/01/13
6210
从超过100万个项目中搜索C++代码示例
  此服务可以帮助程序员找到使用类和方法以及文档的真实示例。我们的系统会自动搜索、检索和排序来自超过100万个开源项目的源代码示例。该服务的主要功能是有机会在单个页面上查看多个项目中使用特定类或方法的示例。
Qt君
2023/03/17
2690
从超过100万个项目中搜索C++代码示例
java检测网站死链,网站死链检测工具
一个网站死链过量,对付访客来讲,无奈关上的链接是对付友好的用户体验的一大袭击。而对付搜索引擎来讲,站点假如存在过量的死链接,那末搜索引擎的蜘蛛就会逐步的不再来匍匐你的站点。其成果便是网站的快照不更新,收录量骤减,排名降低及访客的大批散失。
全栈程序员站长
2022/09/15
1.3K0
C++ OpenCV凸包检测
凸包指如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。简单点理解,就是一个多边型,没有凹的地方。凸包(凸壳)能包含点集中所有的点,凸包检测常应用在物体识别、手势识别及边界检测等领域。
Vaccae
2019/07/24
1.9K0
C++项目中采用CLR的方式调用C#编写的dll
1、注意事项:在编写C#DLL类库时,最好不要出现相同的命名空间,否则在C++中调用可能会出现编译错误。 2、将C#的源码生成的“dll”文件复制到C++项目中的Debug目录下 3、将C++项目属性设置为公共语言运行时支持 4、在项目中导入dll文件和引用命名空间
指尖改变世界
2018/08/31
2.4K0
C++爱心代码[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/04
6.3K0
C++爱心代码[通俗易懂]
C++小代码
这个代码示例实现了一个简单的学生信息管理系统,包括学生类 Student 和学生数据库类 StudentDatabase。学生类具有姓名、年龄和专业等属性,并提供获取这些属性的方法。学生数据库类具有添加学生和打印学生信息的方法。
青灯古酒
2023/10/16
1240
删除有序数组中的重复项 C++
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
叶茂林
2023/07/30
2880
C代码调用C++函数
编译为动态链接库 g++ -fPIC -shared -o libhello.so hello.cpp
十毛
2019/03/27
2.2K0
C#引用C++代码
现在在Windows下的应用程序开发,VS.Net占据了绝大多数的份额。因此很多以前搞VC++开发的人都转向用更强大的VS.Net。在这种情况下,有很多开发人员就面临了如何在C#中使用C++开发好的类的问题。下面就用一个完整的实例来详细说明怎样用托管C++封装一个C++类以提供给C#使用。 比如,现在有一个工程名为NativeCppDll的由C++编写的DLL,里面输出了一个CPerson类。下面是具体的代码:
全栈程序员站长
2022/07/15
1.3K0
盘点C++开源项目中的十大Bug
又一年即将结束,是时候盘点一下开源项目中的 Bug 了。2020 年的盘点可能还需要点时间,本文我们先来看看 2019 年开源 C/C++ 项目中遇到的一些最有趣的槽点。
深度学习与Python
2020/11/05
8910
N年前的旧代码,爆炸
最近刚接到的任务是要在官网商城PC版上面添加一些功能。第一次体会到糟糕的代码是多么的可怕。不论是从项目结构,还是代码风格,经历了“几代人”的“锤炼”,早已风化腐朽多时。
上山打老虎了
2022/06/14
3060
N年前的旧代码,爆炸
旧键盘 C语言
旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。
叶茂林
2023/07/28
1410
OpenCV检测轮廓极点(Python C++)
今天分享一个OpenCV检测轮廓极点实例,原图如下,我们需要检测出地图中最大轮廓的上下左右四个极点,并进行标注显示。
Color Space
2020/08/21
1.3K0
OpenCV检测轮廓极点(Python C++)
C++ OpenCV SVM实战Kindle检测(二)----目标检测
我们新建一个opencv-svm的项目,然后在源文件中新建一个svmpredict.cpp文件。
Vaccae
2019/10/16
1.5K0
C++ OpenCV中Canny边缘检测
Canny边缘检测算子是一种多级检测算法。1986年由John F. Canny提出,同时提出了边缘检测的三大准则:
Vaccae
2019/07/24
2.4K0
C++ OpenCV SVM实战Kindle检测(二)----目标检测
前一篇文章《C++ OpenCV SVM实战Kindle检测(一)----训练数据》我们除了介绍了一下SVM,并且做了对Kindle的图片进行了数据的训练,生成了模型文件,这一篇我们就主要来看看怎么识别预测。
Color Space
2021/07/01
5050
C++ OpenCV SVM实战Kindle检测(二)----目标检测
C++代码简化之道
我是极简主义者,崇尚简洁明快的代码风格,这也可能是我不喜欢Java全家桶的原因……当然我说的简洁是要建立在不降低可读性的前提下,即不影响代码本身的表现力。如果为求代码精简而让代码晦涩艰深同样不可取。
果冻虾仁
2021/12/08
1.4K0
C++静态代码分析
运行完后,系统目录/opt/ros/galactic/bin下就会被安装下图所示的文件。
首飞
2022/07/31
1.1K0
C++静态代码分析

相似问题

我怎么才能躲过一个街区呢?

10

我怎么能用相同的主题来主题一些街区呢?

20

我能用Twig和Apache来调试Twig模板吗?

10

我该怎么处理“文件”?

10

有一个新的元标记设置可以从令牌中修剪内容。我该怎么用呢?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档