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

这几种更新记录的方法,哪种更好?解决方案

2012-01-31 
这几种更新记录的方法,哪种更好?更新数据表记录,需要更新的列是在调用时动态改变的,因此在设计存储过程阶

这几种更新记录的方法,哪种更好?
更新数据表记录,需要更新的列是在调用时动态改变的,因此在设计存储过程阶段是不知道的,所以需要考虑到所有的列,我想到有三种方法:
1、动态SQL语句
语句大概如下:
...   ...
SET   @SQL   =   'UPDATE   DataTable   SET   '
IF   @Field1   IS   NOT   NULL
        BEGIN
                IF   @NeedComma   =   1
                        SET   @SQL   =   @SQL   +   ',   '
                SET   @SQL   =   @SQL   +   'Field1   =   @Field1 '
                SET   @NeedComma   =   1
        END
IF   @Field2   IS   NOT   NULL
        BEGIN
                IF   @NeedComma   =   1
                        SET   @SQL   =   @SQL   +   ',   '
                SET   @SQL   =   @SQL   +   'Field2   =   @Field2 '
                SET   @NeedComma   =   1
        END
...   ...
SET   @SQL   =   @SQL   +   '   WHERE   RecordID   =   @RecordID '
EXEC   sp_executeSQL   @SQL,   ...   ...
...   ...

2、最小化更新
...   ...
IF   @Field1   IS   NOT   NULL
        BEGIN
                UPDATE   DataTable   SET   Field1   =   @Field1   WHERE   RecordID   =   @RecordID
        END
IF   @Field2   IS   NOT   NULL
        BEGIN
                UPDATE   DataTable   SET   Field2   =   @Field2   WHERE   RecordID   =   @RecordID
        END
...   ...

3、全部更新
...   ...
UPDATE
        DataTable
SET
        Field1   =   CASE   WHEN   @Field1   IS   NOT   NULL   THEN   @Field1   ELSE   Field1
        Field2   =   CASE   WHEN   @Field2   IS   NOT   NULL   THEN   @Field2   ELSE   Field2
WHERE
        RecordID   =   @RecordID
...   ...

大家觉得以上三种方法哪种更好?谢谢!

[解决办法]
耗时:

1 < 3 < 2
[解决办法]
支持Limpire(昨夜小楼)
个人认为方案1的性能最高,毕竟只执行一次DB更新。
也请高手能够来讲解一下原理
关注ing………………

[解决办法]
我觉得三种方法都差不多,关键到实际数据中去测试,有时理论的不一定对,例如有人说游标慢,但实际中用游标就是快,这与理论完全相反了
[解决办法]
2.1、最小化更新
... ...
IF @Field1 IS NOT NULL
BEGIN
IF @Field2 IS NOT NULL
UPDATE DataTable SET Field1 = @Field1,Field2 = @Field2 WHERE RecordID = @RecordID
ELSE


UPDATE DataTable SET Field1 = @Field1 WHERE RecordID = @RecordID
END
ELSE IF @Field2 IS NOT NULL
UPDATE DataTable SET Field2 = @Field2 WHERE RecordID = @RecordID

... ...

3.1、全部更新
... ...
UPDATE
DataTable
SET
Field1 = ISNULL(@Field1,Field1)
Field2 = ISNULL(@Field2,Field2)
WHERE
RecordID = @RecordID
[解决办法]
严重同意楼上的意见。

热点排行