怎么使用sql查询语句处理关于表的某项数据更新的有关问题(有关问题内详)
如何使用sql查询语句处理关于表的某项数据更新的问题(问题内详)
假设目前我有一个表A:
其中表A如下
id name
001 李
002 王
003 罗
(更新前的表A)
现在,我要更新表A中id=001的name的数据
并且定义一个int类型的变量@b,并将@b初始化为1
当@b<一个指定的函数,假设为3时,持续更新表A中id=001的name的数据
如果我要将表A更新后的数据为如下,那用sql查询语句应该怎么写?
更新后的表A:
id name
001 李1
001 李2
001 李3
002 王
003 罗
(更新后的表A)
如果只能使用一次table函数,这个问题应该如何解决?
------解决方案--------------------
你的需求,当参数大于已有的记录数时,只通过更新是实现不了,除了更新已有的数据,还需要插入新数据
------解决方案--------------------
自己构造函数
------解决方案--------------------
你这个所谓的更新更多是插入吧?如果要做,那先要判断表中现有数量,然后和你的参数比较,只有小于等于的情况下才进行操作,另外如果你要这样做的话,每次循环都要判断哦,因为当你插入新数据的时候,数量又多了一条。又要重新判断。你得需求是想实现什么?或者说这是什么类型的应用,看看有没有别的方法来实现。
------解决方案--------------------
1、其实不应该有完全一样的数据,这违反了关系数据库理论。你的相同数据应该是某些字段而已。
2、找出不相同的数据方法有很多,比如用exists、用except等等,你找到了,再筛选top1就可以拉
------解决方案--------------------
是不奇怪,但是不应该。你想想如果允许这样的数据存在的话:
1、查询的时候怎么办?不能每次都distinct吧?
2、更新的时候才是头疼的。
3、这是不合理的冗余,占了空间,也没意义。
所以强烈建议每个表都要有一个主键,无论是复合的还是但主键。
------解决方案--------------------
delete from @ta where name=@b3+CONVERT(char(1),@i)
下加一条
delete from @ta where name=@b4+CONVERT(char(1),@i)
------解决方案--------------------
根据你的思路我也写了一段代码
假设目前我有一个表A:
其中表A如下
id name
001 李
002 王
003 罗
(更新前的表A)
现在,我要更新表A中id=001的name的数据
并且定义一个int类型的变量@b,并将@b初始化为1
当@b<一个指定的函数,假设为3时,持续更新表A中id=001的name的数据
如果我要将表A更新后的数据为如下,那用sql查询语句应该怎么写?
更新后的表A:
id name
001 李1
001 李2
001 李3
002 王
003 罗
(更新后的表A)
如果只能使用一次table函数,这个问题应该如何解决?
------解决方案--------------------
你的需求,当参数大于已有的记录数时,只通过更新是实现不了,除了更新已有的数据,还需要插入新数据
------解决方案--------------------
自己构造函数
------解决方案--------------------
你这个所谓的更新更多是插入吧?如果要做,那先要判断表中现有数量,然后和你的参数比较,只有小于等于的情况下才进行操作,另外如果你要这样做的话,每次循环都要判断哦,因为当你插入新数据的时候,数量又多了一条。又要重新判断。你得需求是想实现什么?或者说这是什么类型的应用,看看有没有别的方法来实现。
------解决方案--------------------
1、其实不应该有完全一样的数据,这违反了关系数据库理论。你的相同数据应该是某些字段而已。
2、找出不相同的数据方法有很多,比如用exists、用except等等,你找到了,再筛选top1就可以拉
------解决方案--------------------
是不奇怪,但是不应该。你想想如果允许这样的数据存在的话:
1、查询的时候怎么办?不能每次都distinct吧?
2、更新的时候才是头疼的。
3、这是不合理的冗余,占了空间,也没意义。
所以强烈建议每个表都要有一个主键,无论是复合的还是但主键。
------解决方案--------------------
delete from @ta where name=@b3+CONVERT(char(1),@i)
下加一条
delete from @ta where name=@b4+CONVERT(char(1),@i)
------解决方案--------------------
根据你的思路我也写了一段代码
- SQL code
CREATE TABLE t(id VARCHAR(20),[name] VARCHAR(20)) INSERT INTO t SELECT '001','张三' UNION SELECT '002','李四' GO IF EXISTS (SELECT 1 FROM sys.objects WHERE NAME = 'f_****') DROP FUNCTION f_**** GO create FUNCTION [dbo].[f_****] ( @id VARCHAR(20), @num int ) RETURNS @tmp TABLE ( id VARCHAR(20), [name] VARCHAR(20) ) AS BEGIN DECLARE @name AS VARCHAR(20); IF EXISTS (SELECT 1 FROM t WHERE id = @id) SELECT TOP 1 @name= [Name] FROM t WHERE id = @id ELSE RETURN; WHILE @num >= 1 BEGIN INSERT INTO @tmp VALUES(@id,@name+RTRIM(LTRIM(str(@num)))) set @num = @num -1 END RETURN END GO SELECT * FROM T UNION SELECT * FROM f_****('001',3) GO DROP TABLE t DROP FUNCTION f_**** GO