重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
create function fun3(@m int=10,@n int=8)
献县网站建设公司成都创新互联,献县网站设计制作,有大型网站制作公司丰富经验。已为献县上1000+提供企业网站建设服务。企业网站搭建\外贸网站建设要多少钱,请找那个售后服务好的献县做网站的公司定做!
returns int
as begin
return @m+@n
end
go
select dbo.fun3(default,10);
--弟弟,变量声明弄错了,是@m int =10 而不是 @m=10 int
多写。我刚接触存储过程的时候,感觉什么都不懂。慢慢接触多了,写的存储过程也越来越难,现在就熟练了。
建议复习:
建库、建表,删库、删表。
select/update/delete 的使用
通配符、运算符、聚合函数
union/jion/group by/order by/having等的使用
子查询
视图、存储过程、函数、触发器的使用
另外掌握T-SQL的基本语法,包括if else/when case/with/while等等。
数据库设计方面,E-R图、范式的使用。
暂想了这么多。
还是先上代码吧
,可以先看
SQL语句去掉重复记录,获取重复记录
复制代码
代码如下:
ALTER
procedure
[dbo].[PROC_ITEMMASTER_GETUNIQUE]
@PAGEINDEX
INT,@uid
int,@itemnumber
varchar(50)
AS
begin
tran
--开始事务
drop
table
[ItemMaster].[dbo].[testim]
--删除表
--把不重复记录转存到testim中
select
*
into
[ItemMaster].[dbo].[testim]
from
[ItemMaster].[dbo].[dat_item_master]
where
item_uid
in(select
min(item_uid)
as
item_uid
from
[ItemMaster].[dbo].[dat_item_master]
group
by
item_number)
and
status=0
select
top
10
*
from
[ItemMaster].[dbo].[testim]
where
item_uid
not
in
(select
top
(10*(@PAGEINDEX-1))
item_uid
from
[ItemMaster].[dbo].[testim])
and
owneruid=@uid
and
item_number
like
@itemnumber+'%'
--判断是否出错
if
@@error0
begin
rollback
tran
--出错则回滚
end
else
begin
--否则提前事务
commit
tran
end
我的数据是这样的:因为item_uid是标识列,item_number有重复的,
我想过滤成这样:
顺带说几个在编程的时候遇到的小问题
1.程序
出现
Could
not
find
stored
procedure
找不到这个存储过程
因为我的程序数据库有四个,而默认连接是A,但实际要执行B库里的存储过程,导致出错,
解决办法1:可在A里面建个一样的存储过程2:在执行连接的时候,替换下数据库就行了
2.
asp.net/C#
将存储过程中返回的数据集,填充到dataset/datatable
复制代码
代码如下:
SqlConnection
conn
=
new
SqlConnection(ConfigurationManager.ConnectionStrings["SolutionSQLServer"].ToString());
SqlCommand
cmd
=
new
SqlCommand("Test",conn);
cmd.CommandType
=
CommandType.StoredProcedure;
cmd.Parameters.Add("@MaxId",
SqlDbType.Int).Value
=
12000;
SqlDataAdapter
sda
=
new
SqlDataAdapter(cmd);
DataTable
dt
=
new
DataTable();
sda.Fill(dt);
在这感谢
3.在存储过程里面,写SQL语句不能动态不加order
by
功能
比如
复制代码
代码如下:
--·@new_orderby
是传入参数,不能这样写
select
top
(10*(2-1))
item_uid
from
testim
order
by
@new_orderby
--执行这个的时候,SQL会出现
The
SELECT
item
identified
by
the
ORDER
BY
number
1
contains
a
variable
as
part
of
the
expression
identifying
a
column
position.
Variables
are
only
allowed
when
ordering
by
an
expression
referencing
a
column
name.
不过我找到解决办法,不过很麻烦,
(第二个回答用
'
sql
'进行连接)
(用case
end
也行)
4.
select
into
和
insert
into
select
两种复制文句
(这里感谢)
1.INSERT
INTO
SELECT语句
语句形式为:Insert
into
Table2(field1,field2,...)
select
value1,value2,...
from
Table1
要求目标表Table2必须存在,由于目标表Table2已经存在,所以我们除了插入源表Table1的字段外,还可以插入常量。
2.SELECT
INTO
FROM语句
语句形式为:SELECT
vale1,
value2
into
Table2
from
Table1
要求目标表Table2不存在,因为在插入时会自动创建表Table2,并将Table1中指定字段数据复制到Table2中。
5.顺便复习下常用的SQL方法语句
复制代码
代码如下:
declare
@name
varchar(200)
--声明变量
set
@name='abcd;def'
--赋值
'exec
len
:'+Convert(varchar(10),Len(@name))
--convert(type,value)转换,Len(value)获取大小
'exec
charindex:'+Convert(varchar(10),CharIndex('e',@name))--CharIndex(find,value)
在value中查找find的位置
'not
replace:'+@name
'exec
replace:'+Replace(@name,';','')
--用replace替换
'exec
substring:'+Substring(@name,0,3)--用substring截取
@@RowCount
--返回上一行代码受影响的行数
作者:chenhuzi
《东南大学SQL数据库基础资料》百度网盘资源免费下载
链接:
?pwd=d7k3 提取码: d7k3
东南大学 SQL数据库基础 全39讲 主讲-幸研 附复习课|各学科 学习视频目录|复习课|数据库基础003.csf|数据库基础002.csf|数据库基础001.csf|数据库基础(复习)042.csf|数据库基础(复习)041.csf|数据库基础(复习)040.csf|政治目录.txt|哲学目录.txt|语言目录.txt|艺术目录.txt|医学目录.txt|心理目录.txt
可以用最简单的:SQLServer,MYSQL!装好后,新建个数据库,然后再建表,然后再造些数据,最后在表里写SQL语句,可以直接运行的!