sql存储过程update
DROPPROCEDUREexp3
GO
CREATEPROCEDUREexp3
@snchar(10)='2015200011',
@sjhchar(11)='12018060001',
@kgcjint,
@zgcjint,
@cjint
AS
UPDATEcyjgSETkgtcj=@kgcj,zgtcj=@zgcj,zcj=@cjWHEREsno=@snANDsjbh=@sjh;
go
EXECUTEexp3@kgcj=67,@zgcj=26,@cj=93
go
⑵ SQL存储过程更新数据
表HC_RKDMX的相关字段
YJSL OrderNO RKSL
先按OrderNO降序,得到
OrderNO RKSL YJSL
---4------5---NULL
---3------2---NULL
---2------4---NULL
---1------6---NULL
然后set @SL = 11
set YJSL =@SL -RKSL,减完为止
得到
OrderNO RKSL YJSL
---4------5----6
---3------2----4
---2------4----0
---1------6---NULL
再把最后减到为0的数变为11-(YJSL1+YJSL2)=1?
然后把剩下的不够减的NULL变0?
而且还要把得到的YJSL更新到原来的ROWID列上?得到一个6 4 1 0的列按物理地址插入?就是说倒序插入?
OrderNO RKSL YJSL
---4------5----0
---3------2----1
---2------4----4
---1------6----6
如果set @SL = 13的话
OrderNO RKSL YJSL
---4------5----8
---3------2----6
---2------4----2
---1------6---(-4) 这里(-4)变为13-(5+2+4)=2?
如果@SL不刚好的排序后的全N个RKSL的和的话怎么处理,负数和剩余的NULL全部为0?
看不懂。。是不是你算错了
应该是由@SL减去表里的RKSL等于YJSL(安OrderNO一次序小到大的顺序的计算,直到计算完为止)
OrderNO RKSL YJSL
---1------6----5
---2------4----1
---3------2----(-1)
---4------5---NULL
不知道是不是你算错了~想来想去不知道你怎么得到YJSL 6 4 1 0的唯一的可能是先降序 11-5=6 -2=4 -4=0那是6 4 0 NULL啊
囧。、。。自己本来还以为降序的
后面想来想去晕了~
其实存储过程的话很好写的,但是没弄清楚你要得到什么,怎么得到
⑶ sql 中update的巧妙用法
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由个事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。触发器可以查询其他表,而且可以包含复杂的 SQL 语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。创建触发器的SQL语法DELIMITER |CREATE TRIGGER `<databaseName>`.`<triggerName>`< [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] > ON <tableName> FOR EACH ROWBEGIN --do somethingEND |触发器的优点触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。比较触发器与约束约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,而引用完整性 (RI) 则应通过 FOREIGN KEY 约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。例如:除非 REFERENCES 子句定义了级联引用操作,否则 FOREIGN KEY 约束只能以与另一列中的值完全匹配的值来验证列值。CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的列验证列值,则必须使用触发器。约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器。触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。当更改外键且新值与主键不匹配时,此类触发器就可能发生作用。例如,可以在 titleauthor.title_id 上创建一个插入触发器,使它在新值与 titles.title_id 中的某个值不匹配时回滚一个插入。不过,通常使用 FOREIGN KEY 来达到这个目的。如果触发器表上存在约束,则在 INSTEAD OF 触发器执行后但在 AFTER 触发器执行前检查这些约束。如果约束破坏,则回滚 INSTEAD OF 触发器操作并且不执行 AFTER 触发器。触发器到底可不可以在视图上创建 在 SQL Server�6�4 联机丛书中,是没有说触发器不能在视图上创建的, 并且在语法解释中表明:在 CREATE TRIGGER 的 ON 之后可以是视图。 然而,事实似乎并不是如此,很多专家也说触发器不能在视图上创建。我也专门作了测试,
⑷ mssql中update中批量使用存储过程执行结果
如果是函数,那么返回值可以作为结果返回,那么就是类似这样的调用:
c=B(a,b),
update A set c=B(a,b);
如果是存储过程,那么返回值必然是使用out 参数返回的,那么只能类似这样调用:
B(a,b,out c)
显然是无法像上面的函数式的调用,只能用游标一行一行调用。
或者
在这个存储过程外面在加一个函数,在函数里面调用B,然后再像上面直接在sql理解直接调用。
大概意思:
function B1(a,b) return as int
is
c int;
call B(a,b,c);
return c;
end
⑸ sql中创建关于更新的存储过程
关于delphi调用存储过程,用sql
server自带的“创建存储过程向导”给表login建立一个更新存储过程。
悬赏分:100
|
离问题结束还有
12
天
18
小时
|
提问者:风风我依
|
检举
存储过程代码如下:已知表login有passname和password两个字段。
create
procere
[update_login_1]
(@passname_1
[varchar],
@passname_2
[varchar](50),
@password_3
[varchar](50))
as
update
[wqzx].[dbo].[login]
set
[passname]
=
@passname_2,
[password]
=
@password_3
where
(
[passname]
=
@passname_1)
go
-------------------------------------------------------------------------------------
在delp调用该存储过程,要求只该改字段中的password,即建一个文本框将里面内容替换一个记录中的password,而保持passname不变,简单讲就是修改一个用户名的密码。怎么写代码?问题补充:
"强唐华"我试过这样写存储过程了,没用的,如果可以,那在delphi中怎么写代码调用这个存储过程?
强调下:这是sql自带建立的存储过程,就是由“创建存储过程向导”生成,我觉得不会错的,问题是怎么在delphi中调用该存储过程,代码呢?
我建立了一个插入的存储过程,代码如下:
with
storedproc1
do
begin
parambyname('@passname_1').asstring:=edit1.text;
parambyname('@password_2').asstring:=edit2.text;
execproc;
if
params[0].asinteger=0
then
messagedlg('添加新用户名成功!',mtinformation,[mbok],0)
else
messagedlg('添加用户失败!',mterror,[mbok],0);
end;
这段代码是可以成功插入一个记录的。现在是想修改某个记录。
回答
共1条
create
procere
[dbo].[update_login]
(@name
varchar(50),
@password
[varchar](50))
as
update
useres
set
password=@password
where
name=
@name
这么简单的存储过程,都不会用?
sqlconnection
conn
=
new
sqlconnection("data
source=tq-pc;initial
catalog=tq;user
id=sa;password=123");
sqlcommand
cmd
=
new
sqlcommand("update_login",
conn);
cmd.commandtype
=
commandtype.storedprocere;
cmd.parameters.addwithvalue("@name",
textbox3.text.trim());
cmd.parameters.addwithvalue("@password",
textbox4.text.trim());
conn.open();
int
i
=
cmd.executenonquery();
if
(i
>
0)
response.write("密码修改成功!");
else
response.write("密码修改失败!");
⑹ sql查询语句问题,我想写一个存储过程,当查询出来的结果满足一个条件时,就会执行一条update语句。
存储过程里面加入条件判断分支就行了
大致是:
DECLARE @myVar [类型]
SELECT @myVar=[列] FROM [表] WHERE 条件
IF @myVar=xxx
BEGIN
UPDATE ....
END
ELSE IF @myVar=xxxxx
BEGIN
UPDATE ....
END
ELSE IF ....
.....
⑺ SQL存储过程update表内容,如果判断比较多,怎么增加变量优化
update set value= A where value=B
要更正的值相同,而且条件相同的,可以一起update
⑻ sql更新数据存储过程怎么写
create procere update_table ( @c_tbname varchar(128), -- 要更新的表名
@c_upcolname varchar(1000), -- 要更新的字段列表,以豆号隔开
@c_updata varchar(1000), -- 要更新的数据列表,以豆号隔开,要与相应的列一一对应
@c_id varchar(100) -- 要更新的关键字,没有关键字的不能更新
)
as
begin
declare @c_sql varchar(max)
declare @i_bcol int
declare @i_ecol int
declare @i_bdata int
declare @i_edata int
if @c_id is null or @c_id = ''
return
set @i_bcol= 1
set @i_bdata= 1
set @c_sql = ' update ' + @c_tbname + ' set '
set @i_ecol = charindex(',' , @c_upcolname , @i_bcol )
while @i_ecol > 0
begin
set @c_sql = @c_sql + substring( @c_upcolname,@i_bcol,@i_ecol - 1 ) + ' = '
set @i_edata= charindex(',' , @c_updata, @i_bdata)
set @c_sql = @c_sql + '''' + substring( @c_updata,@i_bdata,@i_edata- 1 ) + ''' ,'
set @i_bcol = @i_ecol + 1
set @i_ecol = charindex(',' , @c_upcolname , @i_bcol )
end
set @c_sql = @c_sql + substring( @c_upcolname,@i_bcol,len@c_upcolname) - 1 ) + ' = '
set @c_sql = @c_sql + '''' + substring( @c_updata,@i_bdata,len(@c_updata)- 1 ) + ''' '
set @c_sql = @c_sql + ' where id = ''' + @c_id + ''' '
exec ( @c_sql )
end