首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么使用sql查询语句处理关于表的某项数据更新的有关问题(有关问题内详)

2012-10-20 
如何使用sql查询语句处理关于表的某项数据更新的问题(问题内详)假设目前我有一个表A:其中表A如下idname001

如何使用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)


[解决办法]
根据你的思路我也写了一段代码

SQL code
CREATE TABLE t(id VARCHAR(20),[name] VARCHAR(20))INSERT INTO tSELECT '001','张三'UNIONSELECT '002','李四'GOIF EXISTS (SELECT 1 FROM sys.objects  WHERE NAME = 'f_csdn')    DROP FUNCTION f_csdnGOcreate FUNCTION [dbo].[f_csdn]   (   @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  GOSELECT * FROM TUNIONSELECT * FROM f_csdn('001',3)GODROP TABLE tDROP FUNCTION f_csdnGO 

热点排行