组合查询存储过程的实现
历经千辛万苦,终于实现了这个组合查询的存储过程。之前在网上看了很多资料,感觉讲的也就那么回事儿。
在写存储过程之前,心中总是有很多疑虑。比如创建好存储过程之后,保存在哪里才会不妨碍它运行呢?我刚写完的存储过程,在SQL Server里对应的位置为什么不显示呢?存储过程的名字怎样起呢?…………
可能就是对这块儿的知识太匮乏了,才会产生诸多疑虑。但是只要你自己动手把它实现了,哪怕是简单功能的实现,都会切身体会到”实践出真知”深刻内涵。
set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER PROCEDURE [dbo].[OperRecordThree] --这里定义变量,可以通过外界依次传入参数,与变量匹配 @File varchar(10), --字段0 @Operator varchar(2),--操作符0 @Context varchar(10),--内容0 @RelationOne varchar(3),--关系1 @FileOne varchar(10), --字段1 @OperatorOne varchar(2), --操作符1 @ContextOne varchar(10),--内容1 @RelationTwo varchar(3),--关系2 @FIleTwo varchar(10), --字段2 @OperatorTwo varchar(2),--操作符2 @ContextTwo varchar(10)--内容2 AS --这里定义临时变量 DECLARE @TempSql varchar(500) BEGIN --char(32)是空格,char(39)是单引号 set @TempSql='select * from workingTeacher where '+char(32) +@File +@Operator+char(39)+@Context+char(39) +char(32)+@RelationOne+char(32) +@FileOne+@OperatorOne+char(39)+@ContextOne+char(39) +char(32)+@RelationTwo+char(32) +@FIleTwo+@OperatorTwo+char(39)+@ContextTwo+char(39) --下面这一句是执行这个存储过程的语句。 execute (@tempsql) END
测试语句:
execute OperRecordThree 'robot','<>','3','and','levels','<>','管理员','and','robot','<>','2'
下面是DAL层的调用函数:
#Region "操作员工作纪律第三排记录"
Public Function OperatorRecordThree(ByVal OperatorRec() As Entry.StuBaseInfoInq) As DataTable
Dim sql As String = "OperRecordThree"
Dim sqlcmd As SqlCommand = New SqlCommand(sql, con)
Dim dt As New DataTable
Dim dst As New DataSet
Dim MyDataAdapter As New SqlDataAdapter
sqlcmd.CommandType = CommandType.StoredProcedure
'依次为存储过程的参数赋值
sqlcmd.Parameters.Add("@File", SqlDbType.VarChar, 10).Value = OperatorRec(0).Field
sqlcmd.Parameters.Add("@Operator", SqlDbType.VarChar, 2).Value = OperatorRec(0).Oper
sqlcmd.Parameters.Add("@Context", SqlDbType.VarChar, 10).Value = OperatorRec(0).Context
sqlcmd.Parameters.Add("@RelationOne", SqlDbType.VarChar, 3).Value = OperatorRec(1).Relation
sqlcmd.Parameters.Add("@FileOne", SqlDbType.VarChar, 10).Value = OperatorRec(1).Field
sqlcmd.Parameters.Add("@OperatorOne", SqlDbType.VarChar, 2).Value = OperatorRec(1).Oper
sqlcmd.Parameters.Add("@ContextOne", SqlDbType.VarChar, 10).Value = OperatorRec(1).Context
sqlcmd.Parameters.Add("@RelationTwo", SqlDbType.VarChar, 3).Value = OperatorRec(2).Relation
sqlcmd.Parameters.Add("@FileTwo", SqlDbType.VarChar, 10).Value = OperatorRec(2).Field
sqlcmd.Parameters.Add("@OperatorTwo", SqlDbType.VarChar, 2).Value = OperatorRec(2).Oper
sqlcmd.Parameters.Add("@ContextTwo", SqlDbType.VarChar, 10).Value = OperatorRec(2).Context
MyDataAdapter.SelectCommand = sqlcmd
MyDataAdapter.Fill(dst, "workingTeacher")
dt = dst.Tables("workingTeacher")
con.Open()
sqlcmd.ExecuteNonQuery().ToString()
Return dt
con.Close()
End Function
#End Region
浙公网安备 33010602011771号