sqlserver存储过程里传字段、传字符串,并返回DataTable、字符串,存储过程调用存储过程。,存储过程字符串处理
经常需要查一些信息, 想写视图来返回数据以提高效率,但是用试视图不能传参,只好想到改存储过程。记录一下语法,方便以后做项目时候想不起来了用。
1:传字段返回datatable
2: 传字段回一串字符
3: 传字符串返回datable
4:存储过程调用存储过程
--加半个小时
(select dateadd(MINUTE,30,GETDATE() ))--UnLockTime 往后加半个小时 CONVERT(varchar(100), @UnLockTime, 20)
--转成可以拼接字符串的格式
set @strOutput='0~由于您最近输错5次密码已被锁定,请在'+CONVERT(varchar(100), @UnLockTime, 20) +'之后再尝试登录~'+CAST(@Id AS NVARCHAR(10))
1:传字段返回datatable

1 //传字段返回datatable
2 USE [ ]
3 GO
4
5 /****** Object: StoredProcedure [dbo].[proc_getIsAPProveRoleUserIdSelect] Script Date: 9/23/2019 10:35:46 AM ******/
6 SET ANSI_NULLS ON
7 GO
8
9 SET QUOTED_IDENTIFIER ON
10 GO
11
12
13 -- =============================================
14 -- Author: <Author,,Name>
15 -- Create date: <Create Date,,>
16 --
Description: 添加工作组人员时查找满足条件的审批人信息
17 -- =============================================
18 ALTER PROCEDURE [dbo].[proc_getIsAPProveRoleUserIdSelect]
19 @ProjectId
int, --
项目id
20 @DepId
int , --
部门id
21 @RoleId1
int , --
权限id
22 @RoleId2
int , --
权限id
23 @RoleId3
int--
权限id
24
25 AS
26 BEGIN
27 select id
from t_user
where DepId=@DepId and State=
0 and (RoleId=@RoleId1 or RoleId=@RoleId2 or RoleId=
@RoleId3)
28 union
29 select id
from t_user
where id
in (
30 select UserId
as id
from t_User_Project
where ProjectId=@ProjectId and State=
0)
31 and (RoleId=@RoleId1 or RoleId=@RoleId2 or RoleId=
@RoleId3)
32
33
34 END
35 GO
36
37
38 public static string getIsAPProveRoleUserId(
int ProjectId,
int DepId)
39 {
40 string Rtstr =
"";
41 string strSql =
string.Format(
"proc_getIsAPProveRoleUserIdSelect");
42 IList<KeyValue> sqlpara =
new List<KeyValue>
43 {
44 new KeyValue{Key=
"@ProjectId",Value=
ProjectId},
45 new KeyValue{Key=
"@DepId",Value=
DepId},
46 new KeyValue{Key=
"@RoleId1",Value=
Convert.ToInt32(UserRole.Administrators)},
47 new KeyValue{Key=
"@RoleId2",Value=
Convert.ToInt32(UserRole.DepartmentLeader)},
48 new KeyValue{Key=
"@RoleId3",Value=
Convert.ToInt32(UserRole.divisionManager) }
49
50 };
51 DataTable dt =
sqlhelper.RunProcedureForDataSet(strSql, sqlpara);
52
53
54 if (dt !=
null && dt.Rows.Count >
0)
55 {
56 for (
int i =
0; i < dt.Rows.Count; i++
)
57 {
58 Rtstr += dt.Rows[i][
"id"].ToString() +
",";
59 }
60 }
61 if (Rtstr.Length >
1)
62 {
63 Rtstr = Rtstr.Remove(Rtstr.Length -
1,
1);
64 }
65 return Rtstr;
66 }
67
68
69
70
71
72
73
74 /// <summary>
75 /// 带参数执行存储过程并返回DataTable
76 /// </summary>
77 /// <param name="str_conn">数据库链接名称</param>
78 /// <param name="str_sql">SQL脚本</param>
79 /// <param name="ilst_params">参数列表</param>
80 /// <returns></returns>
81 public DataTable RunProcedureForDataSet(
string str_sql, IList<KeyValue>
ilst_params)
82 {
83 using (SqlConnection sqlCon =
new SqlConnection(connectionString))
84 {
85 sqlCon.Open();
86 DataSet ds =
new DataSet();
87 SqlDataAdapter objDa =
new SqlDataAdapter(str_sql, sqlCon);
88 objDa.SelectCommand.CommandType =
CommandType.StoredProcedure;
89 FillPram(objDa.SelectCommand.Parameters, ilst_params);
90 objDa.Fill(ds);
91 DataTable dt = ds.Tables[
0];
92 return dt;
93 }
94 }
View Code
2: 传字段返回一串字符

1 // 返回一串字符
2 GO
3
4 /****** Object: StoredProcedure [dbo].[proc_LoginOutPut] Script Date: 9/23/2019 1:04:29 PM ******/
5 SET ANSI_NULLS ON
6 GO
7
8 SET QUOTED_IDENTIFIER ON
9 GO
10
11
12 -- =============================================
13 -- Author: <Author,,Name>
14 -- Create date: <
2019-
04-
25 15:
00:
00,>
15 -- Description: <登录的方法>
16 --
查询用户名是否存在,
17 --
不存在:
18 --
返回: 用户名或密码错误 请检查。
19 --
存在:
20 --
判断用户名和密码是否匹配
21 -- 匹配,看连续密码输入次数是否>
0<
5
22 --
是,清除次数, 直接登录获取更详细信息———————— 返回
23 --
否:看解锁时间是否大于等于当前时间(是:清除解锁时间、清除次数、改状态0),返回详细信息
24 --
(否:返回,您当前处于锁定状态,请在XX时间后进行登录 )
25 --
不匹配:
26 --
根据account 查找id给该用户加一次锁定次数,判断有没有到5次,有:更改锁定状态和解锁时间
27 --
没有:返回您输入的账号或密码错误
28
29 -- =============================================
30
31
32 ALTER PROCEDURE [dbo].[proc_LoginOutPut]
33 @Account varchar(
20), --
账号
34 @Pwd varchar(
50), --
密码
35 @strOutput VARCHAR(
100) output --
输出内容
36
37 --输出格式:
0~由于您最近输错5次密码已被锁定,请在XX之后再尝试登录~
id。 id 不存在写0.存在写自己id
38 --
0~用户名或密码错误~
id。
39 --
1~id~
id
40 -- -
1~发生错误~
id
41 -- -
1~发生错误 0不成功
1 登录成功
42 AS
43
44 BEGIN
45 SET XACT_ABORT ON--
如果出错,会将transcation设置为uncommittable状态
46 declare @PasswordIncorrectNumber
int --
连续密码输入次数
47 declare @Id
int --
用户id
48 declare @count
int --
用户匹配行数
49 declare @UnLockTime datetime --
解锁时间
50
51 BEGIN TRANSACTION
52 --
开始逻辑判断
53
54 ----------
非空判断
55 if(@Account =
'' or @Account
is null or @Pwd=
'' or @Pwd
is null)
56
57 begin
58 set @strOutput=
'0~未获取到信息,请稍后重试~0'
59 return @strOutput
60 end
61 ----------
非空判断结束
62
63
64 else
65 begin
66 set @Id=(
select id
from t_user
where Account=@Account or AdAccount=
@Account)
67 --
1:查询用户名是否存在
68 if @Id>
0--
说明账号存在
69 begin
70 set @count=(
select count(id)
from t_user
where (Account=@Account and Pwd=@Pwd) or (AdAccount=@Account and Pwd=
@Pwd))
71 if @count=
1
72 begin
73 set @PasswordIncorrectNumber=(
select PasswordIncorrectNumber
from t_user
where id=
@Id)
74 --看连续密码输入次数是否>
0 <
5
75 if @PasswordIncorrectNumber<
5
76 begin
77 --
清除次数, 直接登录获取更详细信息———————— 返回
78 update t_user
set PasswordIncorrectNumber=
0 ,UnLockTime=
null ,State=
0
79 from t_user
where id=
@Id
80 set @strOutput=
'1~'+
'登录成功'+
'~'+CAST(@Id AS NVARCHAR(
10))
81
82 select CAST(@strOutput AS NVARCHAR(
20))
83
84
85
86
87 end
88 else --
次数大于5,已经被锁住
89 begin
90 --
看解锁时间是否大于等于当前时间(是:清除解锁时间、清除次数、改状态0),返回详细信息
91 set @UnLockTime=(
select [UnLockTime]
from t_user
where id=
@Id)
92 if @UnLockTime>
GETDATE()
93 begin
94 set @strOutput=
'0~由于您最近输错5次密码已被锁定,请在'+CONVERT(varchar(
100), @UnLockTime,
20) +
'之后再尝试登录~'+CAST(@Id AS NVARCHAR(
10))
95 --
select @strOutput
96 end
97 else --
清除解锁时间、清除次数、改状态0
98 begin
99 update t_user
set PasswordIncorrectNumber=
0 ,State=
0,UnLockTime=
null
100 from t_user
where id=
@Id
101 set @strOutput=
'1~'+
'登录成功'+
'~'+CAST(@Id AS NVARCHAR(
10))
102 select @strOutput
103 end
104 end
105
106 end
107 else --
账号和密码不匹配,但是属于我们系统用户 。
108 begin
109 --
根据id给该用户加一次锁定次数,判断有没有到5次,有:更改锁定状态和解锁时间
110 update t_user
set PasswordIncorrectNumber=PasswordIncorrectNumber+
1
111 from t_user
where id=
@Id
112 set @PasswordIncorrectNumber=(
select PasswordIncorrectNumber
from t_user
where id=
@Id)
113 if @PasswordIncorrectNumber>
4
114 begin
115 set @UnLockTime=(
select dateadd(MINUTE,
30,GETDATE() ))--UnLockTime 往后加半个小时 CONVERT(varchar(
100), @UnLockTime,
20)
116 update t_user
set State=
1,UnLockTime=
@UnLockTime
117 from t_user
where id=@Id -- State=
1锁定,
118
119 INSERT INTO t_user_Log (pId , Account , AdAccount , Pwd , Name , DepId , RoleId , Email , Tel , State , PasswordIncorrectNumber , UnLockTime , CreateUserId , NextUpdatePwdTime)
120 SELECT @Id,Account , AdAccount , Pwd , Name , DepId , RoleId , Email , Tel , State , PasswordIncorrectNumber , UnLockTime , CreateUserId , NextUpdatePwdTime
121 FROM t_user WHERE t_user.Id=
@Id
122
123
124
125 set @UnLockTime= CONVERT(varchar(
100), @UnLockTime,
20)
126 set @strOutput=
'0~由于您最近输错5次密码已被锁定,请在'+CONVERT(varchar(
100), @UnLockTime,
20) +
'之后再尝试登录~'+CAST(@Id AS NVARCHAR(
10))
127 select @strOutput
128 end
129 else --
130 begin
131
132 set @strOutput=
'0~用户名或密码错误'+
'~'+CAST(@Id AS NVARCHAR(
10))
133 select @strOutput
134 end
135 end
136 end
137 else --不存在 返回:
2~
不是我们用户,不用加登录日志。
138 begin
139 set @strOutput=
'2~不是我们用户,不用加登录日志'+
'~0'
140 select @strOutput
141 end
142 end
143
144 IF @@error <>
0 --
发生错误
145
146 BEGIN
147
148 ROLLBACK TRANSACTION
149 set @strOutput=
'-1~发生错误~0'
150
151 SELECT @strOutput
152
153 END
154
155 ELSE
156
157 BEGIN
158
159 COMMIT TRANSACTION
160
161 --执行成功 RETURN
1
162
163 SELECT @strOutput
164 END
165 END
166 GO
167
168
169 //调用
170
171 /// <summary>
172 /// 检验用户账号
173 /// </summary>
174 /// <param name="user"></param>
175 /// <returns></returns>
176 public static string CheckUser(EnUser user)
177 {
178
179 string sql =
string.Format(
"proc_LoginOutPut");
180
181 List<KeyValue> paralist =
new List<KeyValue>
();
182 paralist.Add(
new KeyValue { Key =
"@Account", Value =
user.Account });
183 paralist.Add(
new KeyValue { Key =
"@Pwd", Value =
user.Pwd });
184 object Objreturn = SQLHelper.RunProcedureForObject(sql,
"strOutput", paralist);
185 String returnStr =
"";
186 if (Objreturn !=
null)
187 {
188 returnStr =
Objreturn.ToString();
189
190 }
191 if (returnStr.Length >
0)
192 {
193 return returnStr;
194
195 }
196 else
197 {
198 return "";
199 }
200 }
201
202 //sqlhelper
203
204 /// <summary>
205 /// 带参数执行存储过程并返回指定参数
206 /// </summary>
207 /// <param name="str_conn">数据库链接名称</param>
208 /// <param name="str_sql">SQL脚本</param>
209 /// <param name="str_returnName">返回值的变量名</param>
210 /// <param name="ilst_params">参数列表</param>
211 /// <returns>存储过程返回的参数</returns>
212 public static object RunProcedureForObject(
string str_sql,
string str_returnName, IList<KeyValue>
ilst_params)
213 {
214 using (SqlConnection sqlCon =
new SqlConnection(connectionString))
215 {
216 sqlCon.Open();
217 SqlCommand sqlCmd =
sqlCon.CreateCommand();
218 sqlCmd.CommandType =
CommandType.StoredProcedure;
219 sqlCmd.CommandText =
str_sql;
220 FillPram(sqlCmd.Parameters, ilst_params);
221 //添加返回值参数
222 SqlParameter param_outValue =
new SqlParameter(str_returnName, SqlDbType.VarChar,
100);
223 param_outValue.Direction =
ParameterDirection.InputOutput;
224 param_outValue.Value =
string.Empty;
225 sqlCmd.Parameters.Add(param_outValue);
226 //执行存储过程
227 sqlCmd.ExecuteNonQuery();
228 //获得存过过程执行后的返回值
229 return param_outValue.Value;
230 }
231 }
View Code
3: 传字符串返回datable

1 //传字符串返回datable
2 //加整段查询信息
3
4 USE [FormSystem]
5 GO
6
7 /****** Object: StoredProcedure [dbo].[proc_FormOperationRecordManagepage] Script Date: 9/23/2019 1:06:14 PM ******/
8 SET ANSI_NULLS ON
9 GO
10
11 SET QUOTED_IDENTIFIER ON
12 GO
13
14
15
16
17
18
19
20 -- =============================================
21 -- Author: <Author,,Name>
22 -- Create date: <Create Date,,>
23 --
Description:
24 -- =============================================
25 ALTER PROCEDURE [dbo].[proc_FormOperationRecordManagepage]
26 @pagesize
int,
27 @pageindex
int,
28 @Str_filter NVARCHAR(MAX)
29 AS
30 BEGIN
31 DECLARE @sql NVARCHAR(MAX) ,
32 @num1
int,
33 @num2
int
34
35 set @num1= @pagesize*(@pageindex-
1)+
1;
36 set @num2 =@pagesize*
@pageindex;
37 set @sql=
'SELECT * FROM
38 (
39 SELECT
40 ROW_NUMBER() over( order by fr.OptTimestamp DESC)
as Num,
';
41
42 set @sql=@sql+
' fr.[Id]
43 ,tp.ProjectName
44 ,td.DepName
45 ,tf.FormName
46 ,ud.UploadFileName
47 ,fr.OptName
48 , tu1.Name
as OptUserName
49 , tu2.Name
as DownUserName
50 ,[Operationtime]
51 ,[OptTimestamp]
52 ,fr.[Remark]
53 ,ud.DownTime
54 ,ud.Id
as UploadDownloadId
55 FROM [FormSystem].[dbo].[t_FormOperationRecord] fr
56 left join t_UploadDownload ud on ud.id=
fr.UploadDownloadId
57 left join t_Form tf on tf.id=
ud.FormId
58 left join t_Project tp on tf.ProjectId=
tp.Id
59 left join t_department td on tf.DepId=
td.Id
60 left join t_user tu1 on tu1.Id=
fr.OptUserId
61 left join t_user tu2 on tu2.Id=
ud.DownUserId
62 where 1=
1 '
63
64 --加表单名称查询条件 tf.State=
0
65 if(@Str_filter !=
'' or @Str_filter !=
null)
66 set @sql=@sql+
@Str_filter;
67
68 set @sql=@sql+
' ) Info where Num between @a and @b '
69
70 EXEC sp_executesql @sql ,N
'@a int , @b int', @a=@num1,@b=
@num2
71 END
72 GO
73
74
75
76 public static List<EnFormOperationRecord> GetFormOperationRecordList(
int pageindex,
int pagesize,
77 object str_filter)
78 {
79 string strSql =
string.Format(
"proc_FormOperationRecordManagepage");
80 IList<KeyValue> sqlpara =
new List<KeyValue>
81 {
82 new KeyValue{Key=
"@pagesize",Value=
pagesize},
83 new KeyValue{Key=
"@pageindex",Value=
pageindex},
84 new KeyValue{Key=
"@Str_filter",Value=
str_filter}
85 };
86 DataTable dt =
sqlhelper.RunProcedureForDataSet(strSql, sqlpara);
87 List<EnFormOperationRecord> list =
new List<EnFormOperationRecord>
();
88 if (dt !=
null && dt.Rows.Count >
0)
89 {
90 for (
int i =
0; i < dt.Rows.Count; i++
)
91 {
92 EnFormOperationRecord tb =
new EnFormOperationRecord();
93 tb.Num = Convert.ToInt16(dt.Rows[i][
"Num"].ToString());
94 }
95 }
96 return list;
97 }
98
99
100 /// <summary>
101 /// 带参数执行存储过程并返回DataTable
102 /// </summary>
103 /// <param name="str_conn">数据库链接名称</param>
104 /// <param name="str_sql">SQL脚本</param>
105 /// <param name="ilst_params">参数列表</param>
106 /// <returns></returns>
107 public DataTable RunProcedureForDataSet(
string str_sql, IList<KeyValue>
ilst_params)
108 {
109 using (SqlConnection sqlCon =
new SqlConnection(connectionString))
110 {
111 sqlCon.Open();
112 DataSet ds =
new DataSet();
113 SqlDataAdapter objDa =
new SqlDataAdapter(str_sql, sqlCon);
114 objDa.SelectCommand.CommandType =
CommandType.StoredProcedure;
115 FillPram(objDa.SelectCommand.Parameters, ilst_params);
116 objDa.Fill(ds);
117 DataTable dt = ds.Tables[
0];
118 return dt;
119 }
120 }
View Code
4:存储过程调用存储过程

1 //存储过程调用存储过程
2
3 USE[FormSystem]
4 GO
5
6 /****** Object: StoredProcedure [dbo].[proc_SendEmail] Script Date: 9/23/2019 1:09:46 PM ******/
7 SET ANSI_NULLS ON
8 GO
9
10 SET QUOTED_IDENTIFIER ON
11 GO
12
13
14
15 -- =============================================
16 -- Author: <Author,,Name>
17 -- Create date: <Create Date,,>
18 --
Description:
19 -- =============================================
20 ALTER PROCEDURE[dbo].[proc_SendEmail]
21 @MailToAddress varchar(
50) ,
22 @subTitle varchar(
200),
23 @msg varchar(max) ,
24 @SendUserId
int ,
25 @ControlLevel
int ,
26 @UploadDownloadId
int,
27 @ReceivedUserId
int
28 AS
29
30
31 BEGIN
32 print @MailToAddress;
33 print @subTitle;
34 print @msg;
35
36 if(len(@MailToAddress)>
10)
37 begin
38 EXEC msdb.dbo.sp_send_dbmail @recipients =
@MailToAddress,
39 @copy_recipients=
'',
40 --@blind_copy_recipients=
'1634454@163.com',
41 @body=
@msg,
42 @body_format=
'html',
43 @subject =
@subTitle,
44 @profile_name =
'e-Form';
45 begin
46 insert into t_EmailLog(UploadDownloadId,
47 ReceivedUserId, SendResult, SendUserId, ControlLevel,
48 EmailContent, Email)
49 values(@UploadDownloadId, @ReceivedUserId,
0, @SendUserId,
50 @ControlLevel, @msg, @MailToAddress);
51 end
52 end
53 END
54 GO
55
56
57 public static object Send(
string Subject,
string content,
string adress, Ent_EmailLog EmailLog)
58 {
59 string sql =
string.Format(
"proc_SendEmail");
60 List<KeyValue> paralist =
new List<KeyValue>
();
61 paralist.Add(
new KeyValue { Key =
"@MailToAddress", Value =
adress });
62 paralist.Add(
new KeyValue { Key =
"@subTitle", Value =
Subject });
63 paralist.Add(
new KeyValue { Key =
"@msg", Value =
content });
64 paralist.Add(
new KeyValue { Key =
"@SendUserId", Value =
EmailLog.SendUserId });
65 paralist.Add(
new KeyValue { Key =
"@ControlLevel", Value =
EmailLog.ControlLevel });
66 paralist.Add(
new KeyValue { Key =
"@UploadDownloadId", Value =
EmailLog.UploadDownloadId });
67 paralist.Add(
new KeyValue { Key =
"@ReceivedUserId", Value =
EmailLog.ReceivedUserId });
68 object Objreturn =
SQLHelper.ProcedureForObject(sql, paralist);
69 return Objreturn;
70 }
71
72
73 /// <summary>
74 /// 带参数执行存储过程
75 /// </summary>
76 /// <param name="str_conn">数据库链接名称</param>
77 /// <param name="str_sql">SQL脚本</param>
78 /// <param name="ilst_params">参数列表</param>
79 public static object ProcedureForObject(
string str_sql, IList<KeyValue>
ilst_params)
80 {
81 //如果换到正式要把这里改成
82 using (SqlConnection sqlCon =
new SqlConnection(connectionString2))
83 // using (SqlConnection sqlCon = new SqlConnection(connectionString))
84 {
85 sqlCon.Open();
86 SqlCommand sqlCmd =
sqlCon.CreateCommand();
87 sqlCmd.CommandType =
CommandType.StoredProcedure;
88 sqlCmd.CommandText =
str_sql;
89 FillPram(sqlCmd.Parameters, ilst_params);
90 ////添加返回值参数
91 //SqlParameter param_outValue = new SqlParameter(str_returnName, SqlDbType.VarChar, 100);
92 //param_outValue.Direction = ParameterDirection.InputOutput;
93 //param_outValue.Value = string.Empty;
94 //sqlCmd.Parameters.Add(param_outValue);
95 //执行存储过程
96 return sqlCmd.ExecuteNonQuery();
97 //获得存过过程执行后的返回值
98 //return param_outValue.Value;
99 }
100 }
View Code
http://www.htsjk.com/Sql_Server/36198.html
www.htsjk.Com
true
http://www.htsjk.com/Sql_Server/36198.html
NewsArticle
sqlserver存储过程里传字段、传字符串,并返回DataTable、字符串,存储过程调用存储过程。,存储过程字符串处理 经常需要查一些信息, 想写视图来返回数据以提高效率,但是用试视图不...
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。