mssql 的 存储过程 变量赋值问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mssql 的 存储过程 变量赋值问题相关的知识,希望对你有一定的参考价值。

在mssql的存储过程里 我想 在 insert 加完值后 然后取出其id 然后把 这个id值 赋值给变量,然后在通过这个变量操作别的语句 ,我的思路是这样子的,但是具体的我不知道如何做,希望那位大侠给我 写下,最好是简单点的,不要一篇文章一样的东西发来,

自动生成的id 一般是增量的,所以用提取最大值的方法取的最新ID,
设表TABLE0有字段ID,FIELD1,FIELD2,FIELD3四个字段,这样:
DECLARE @NEWID INT--声明新ID变量
INSERT INTO TABLE0(FIELD1,FIELD2,FIELD3) SELECT FIELD1 FIELD2 FIELD3 FROM TABLE1 WHERE FIELD1=\'XXXX\' .......--插入语句
IF @@ROWCOUNT>0 --如果插入了新行
SET @NEWID=(SELECT MAX(ID) FROM TABLENAME) --给新ID赋值
select @newid as 新ID --使用该变量
参考技术A 我想 在 insert 加完值后 然后取出其id ?

那个 id 是 IDENTITY 的 自动递增的么?

如果是的话, 简单

1> CREATE TABLE test_create_tab2 (
2> id INT IDENTITY(1, 1) PRIMARY KEY,
3> val VARCHAR(10)
4> );
5> go

查询指定表的 当前序号的数值,以及 增量、与种子数值的函数

SELECT
ident_current('test_create_tab2') as 序号当前数值,
ident_incr('test_create_tab2') as 增量,
ident_seed('test_create_tab2') as 种子数(起始数字)
go

在 C# 中, 可以通过下面的方式, 一次执行2行 SQL 语句, 来完成插入并获取最新ID 的处理逻辑.

/// 需要执行的 SQL 语句
/// 需要注意的是
/// 这里实际上定义了2条语句
/// 一条是 INSERT
/// 一条是 SELECT SCOPE_IDENTITY()
private const String INSERT_SQL =
@"INSERT INTO test_SCOPE_IDENTITY (val)
VALUES (@val)
SELECT SCOPE_IDENTITY()";
参考技术B declare @id
insert into 表 (字段1,字段2) values (字段1的值,字段2的值);select @id=@@Identity

--操作其他的语句就可以直接用@id这个变量了

希望有帮到你。另外推荐一个it专业招聘网站

http://www.headin.cn/Jobs
参考技术C 定义一个变量,你可以用函数Max来取刚赋值这一行的ID,把这个ID赋值给这个变量就可以用了 参考技术D 给别量赋值在存储过程内部?? 你所说的"操作别的语句"是这个存储过程里面的语句吗??? 第5个回答  2020-05-03 不知道你是要按照怎样的规则变化,你可以给@a赋一个动态变量值,@a符合哪个条件,执行哪条sql语句,用begin......end语句块,或者用内外循环的方式也可实现,这样就跟@a的值多少没关系了

SQL存储过程定义的变量赋值问题

我在存储过程里定义了变量
wcfy NUMBER;
然后有写了一个赋值语句
wcfy:=select sum(ZSF+QTFY+CCF+CCBZFY+WCRLF) from LQSHDWCSQD where WCDH=dh_in;
为什么老是提示我下面这种东西?是什么意思?

错误:PLS-00103: Encountered the symbol "SELECT" when expecting one of the following:

( - + case mod new not null <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current exists max min prior sql stddev sum variance
execute forall merge time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
<an alternatively-quoted string literal with character set specification>
<an alternatively-quo
行:2935
文本:wcfy:=select sum(ZSF+QTFY+CCF+CCBZFY+WCRLF) from LQSHDWCSQD where WCDH=dh_in;
sum(ZSF+QTFY+CCF+CCBZFY+WCRLF)这里面的字段都是NUMBER类型的

刚才试了isnull这种方法不行哦~而且NUMBER也是数值型的,不可能存在NULL的。也试过用CAST来强制转换了,也不行。

如果都是NUMBER类型的话也可以不用SUM,但是现在出错的问题不是这个问题~

你都把字段值加起来了,那还要SUM()函数干嘛呢?直接写成wcfy:=select ZSF+QTFY+CCF+CCBZFY+WCRLF from LQSHDWCSQD where WCDH=dh_in;
就可以了(如果字段ZSF,QTFY,CCF,CCBZFY,WCRLF是在一条记录里的话 )。
参考技术A SQL中好像没有number型的吧,接近一点的话有个,numeric浮点型,鄙人愚昧!! 参考技术B wcfy:=select sum(isnull(ZSF,0)+isnull(QTFY+isnull(CCF,0)+isnull(CCBZFY,0)+isnull(WCRLF,0)) from LQSHDWCSQD where WCDH=dh_in;

换成这样试试本回答被提问者和网友采纳

以上是关于mssql 的 存储过程 变量赋值问题的主要内容,如果未能解决你的问题,请参考以下文章

mssql 语句判断,存储过程最好

SQL存储过程定义的变量赋值问题

在存储过程中给变量赋值的问题:

sqlserver 存储过程中变量赋值

oracle存储过程中声明变量并赋值的问题

如何给sqlserver 存储过程中的变量赋值?