随笔 - 142  文章 - 2  评论 - 4  阅读 - 57303

组合查询存储过程的实现

历经千辛万苦,终于实现了这个组合查询的存储过程。之前在网上看了很多资料,感觉讲的也就那么回事儿。

在写存储过程之前,心中总是有很多疑虑。比如创建好存储过程之后,保存在哪里才会不妨碍它运行呢?我刚写完的存储过程,在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


posted on   刘正权的博客  阅读(184)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2012年2月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 1 2 3
4 5 6 7 8 9 10

点击右上角即可分享
微信分享提示