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 '总条数'

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • return 返回值所表示的意义

    return 返回值所表示的意义

  • Git下载安装及设置详细教程

    Git下载安装及设置详细教程文章作者:Wendell原文地址:https://www.jianshu.com/p/a152f82c5e4a转载请注明出处!一、安装前准备  1.廖雪峰老师Git教程:推荐Git入门教程。  2.按照自己的系统版本下载Git软件,我的操作系统:Windows764位,安装版本为Git-2.18.0-64-bit.exe(截至201…

  • DDD中的建模方法有哪些[通俗易懂]

    DDD中的建模方法有哪些[通俗易懂]一、背景在之前的文章中已经介绍了DDD相关的概念模式,DDD相关的业务技术架构,但是我们还没有找到一个核心的抓手去实践DDD。DDD的一个核心本质就是对业务建模,或者领域建模。说的很简单,但是做好确实很难,一个需求过来意淫几个实体对象就差不多解决了。深入看,全局看只在脑海中进行的建模实际上并不一定正确和稳定。因此我们需要找到正确的方法帮助对业务领域进行分析,得到建模结构,共享建模成果。二、四色建模法2.1起源&概念&要素关于四色建模的概念我们可与追溯到90年代,起源于四色原型。四色

  • 一键端2

    一键端2一键端

  • android菜鸟教程_菜鸟软件下载app

    android菜鸟教程_菜鸟软件下载app相对布局是通过相对定位的方式让控件出现在布局任意位置; 在相对布局中如果不指定控件摆放的位置,那么控件都会被默认放在RelativeLayout的左上角。因此要先指定第一个控件的位置,其他控件为该位置的相对位置;RelativeLayout属性:(使用相对布局属性需要先指定控件的id,其他控件根据该控件的id,来确定相对于该控件的相对位置)示例:xmlversion=”1

    2022年10月30日
  • navicat15 mac激活码【最新永久激活】

    (navicat15 mac激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

发表回复

您的电子邮箱地址不会被公开。

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