SQL sp_executesql详细使用

SQL sp_executesql详细使用详情请查看microsoft:https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017CREATETABLE[dbo].[Test]( [ID][int]IDENTITY(1,…

大家好,又见面了,我是你们的朋友全栈君。

详情请查看microsoft:

https://docs.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/sp-executesql-transact-sql?view=sql-server-2017

CREATE TABLE [dbo].[Test](
	[ID] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](50) NULL,
	[Num] [nvarchar](50) NULL,
	[CreateTime] [datetime] NULL,
 CONSTRAINT [PK_Test] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
insert into [Test] 
select '张三','2','2019-01-01'
union
select '张三','4','2019-02-01'
union
select '李四','3','2019-02-01'
union
select '李四','3','2019-03-01'

 

如果我需要查询name=‘李四’   and  num=‘4’ 的数据 并且知道总共有多少条数据

先不说其他的写法怎么实现  现在使用sp_executesql实现。

 

---------情况一-------------
declare @SQLOne nvarchar(500)
declare @countOne int
declare @NameOne nvarchar(50)
declare @NumOne nvarchar(50)

set @NameOne=N'李四'
set @NumOne=N'3'

set @SQLOne=N'select @count=count(*) from test where name=@name and num=@num';

--顺序一致
exec sp_executesql @SQLOne,N'@name nvarchar(50),@num nvarchar(50),@count int output ', @NameOne,@NumOne,@countOne output
--使用@name = value 并且顺序一致
exec sp_executesql @SQLOne,N'@name nvarchar(50),@num nvarchar(50),@count int output ', @name=@NameOne,@num=@NumOne,@count=@countOne output
--使用@name = value 顺序不一致
exec sp_executesql @SQLOne,N'@name nvarchar(50),@num nvarchar(50),@count int output ', @num=@NumOne,@name=@NameOne,@count=@countOne output


select @countOne,@NameOne,@NumOne

/*
第一:字符串必须是 Unicode 常量或 Unicode 变量. 如:N'select name from test'
第二:每个参数定义由参数名称和数据类型组成,可传递多个参数
第三:[ OUT | OUTPUT ]指示参数是输出参数
第四:动态Sql的参数列表与外部提供值的参数列表顺序必需一致
第五:一旦使用了 '@name = value' 形式之后,所有后续的参数就必须以 '@name = value' 的形式传递。
*/

如果我需要实现根据Name(非必填项)和CreateTime时间范围(非必填项)进行查询列表和总条数(为什么总需要总条数呢,如果查询分页的话可以参考这个需求+ROW_NUMBER()实现)

CREATE proc [dbo].[SP_test2]
@Name nvarchar(50),
@timeStart nvarchar(50),
@timeEnd nvarchar(50),
@totalCount int output
as
begin
declare @where nvarchar(500)
set @where=N' where 1=1 '
if @Name<>''
begin
set @where+=' and name='+''''+@Name+''''
end
if @timeStart<>''
begin
set @where+=' and CreateTime>='+''''+@timeStart+''''
end
if @timeEnd<>''
begin
set @where+=' and CreateTime<='+''''+@timeEnd+''''
end

declare @SQL nvarchar(500)
declare @SQL_count nvarchar(500)

/*查询totalCount*/
set @SQL_count=N'select @count=count(*) from test '+@where;
exec sp_executesql @SQL_count,N'@count int output',@count=@totalCount output

/*查询列表*/
set @SQL=N'select name,num,CreateTime from test  '+@where;
exec sp_executesql @SQL

end



 

declare @totalCount int

exec dbo.[SP_test2] '','2019-02-01',null,@totalCount output

select @totalCount as '总条数'

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143424.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 手写一个简化版Tomcat[通俗易懂]

    手写一个简化版Tomcat

    2022年4月2日
    32
  • nginx设置301永久重定向

    nginx设置301永久重定向

    2021年10月27日
    38
  • Java工程师就业前景及薪资水平

    Java工程师就业前景及薪资水平Java工程师就业前景及薪资水平在互联网+的影响下,这几年,中国的互联网行业进入了高速发展的阶段,IT行业成为热门,备受追捧和关注。在全球云计算和移动互联网的产业环境下,想参加Java培训成为Java工程师也是很多小伙伴的追求,那么Java工程师就业前景如何?薪资水平高不高呢?下面就来具体了解一下吧。一、Java工程师就业前景1、Android开发:Android是全球最大的智能手机操作系统,根据StrategyAnalytics研究报告显示,全球智能手机出货量在2016年第三季度达到3.75亿台

    2022年7月9日
    17
  • Linux命令 – su命令

    Linux命令 – su命令Linux命令-su命令  su是swithuser的缩写,在Linux中su命令可让用户暂时变更登入的身份,除root外变更时须输入所要变更的用户帐号与密码。1.语法:su[参数][-][用户帐号]2.功能:  变更用户身份,若不指定用户帐号,则预设变更为root。3.参数:-c<指令>或–command=<指令> 执行完指定的指令后,即恢复原来的身份。-f或–fast 适用于csh与tsch,使shell不用去读取启动文件。–l

    2025年6月2日
    0
  • leetcode-1830. 使字符串有序的最少操作次数(数位dp+逆元+快速幂+排列)「建议收藏」

    leetcode-1830. 使字符串有序的最少操作次数(数位dp+逆元+快速幂+排列)「建议收藏」给你一个字符串 s (下标从 0 开始)。你需要对 s 执行以下操作直到它变为一个有序字符串:找到 最大下标 i ,使得 1 <= i < s.length 且 s[i] < s[i – 1] 。找到 最大下标 j ,使得 i <= j < s.length 且对于所有在闭区间 [i, j] 之间的 k 都有 s[k] < s[i – 1] 。交换下标为 i – 1​​​​ 和 j​​​​ 处的两个字符。将下标 i 开始的字符串后缀反转。请你返回将字符串变成有序

    2022年8月9日
    4
  • 中小型企业局域网的组网方案

    中小型企业局域网的组网方案中小型企业局域网的组网方案1.中小型企业局域网的组网方案2.背景和发展情况分析计算机网络技术的迅猛发展,我们当今社会已经步入到了一个信息化时代。人们可以通过网络就可以获取更多的信息资料,人们的生活和工作方式也已经发生了翻天覆地的巨大变化。随着组网技术的发展,中小型企业中的网络连接就出现了局域网的概念,它是指将一定范围内的计算机应用一定的计算机技术连接在一起,从而实现多台电脑同时共享公用网络资源。这种局域网手段将更大的方便局域网内的用户,还可以节省大笔的成本费用和网络开支。对于中小型企业来说,其网络建设

    2022年7月12日
    17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号