sqlserver中动态sql语句应用

news2024/10/7 8:23:00

前言

一、使用exec

1.用拼接方法

二、使用sp_executesql

1.用拼接方法

2.传参的方法

总结



前言

例如:列表查询条件不固定,根据前端传过来的参数,这时需要根据查询条件后台动态生成SQL语句


一、使用exec

exec适用于字符串拼接的方式,如果参数是非nvarchar类型需要转化成此类型做拼接

1.用拼接方法

例如:我要找出某位作者在合适价格的书一个月出版书

代码如下(示例):

declare @AuthorName nvarchar(20)
declare @Price int
declare @PubTime date
declare @sql  nvarchar(max); 
set @sql='select * from book where 1=1 ';

--找出某位作者的书
set @AuthorName='小王'
if(ISNULL(@AuthorName,'')<>'')		
begin
set @sql=@sql+ 'and AuthorName='''+@AuthorName+'''';
end

--找出符合价格的书
set @Price=60;
if(ISNULL(@Price,'')<>'')		
begin
set @sql=@sql+ 'and Price='''++CAST(@Price as nvarchar)+''''
end

set @PubTime='2023-04-01'
--找某个月的出版的书
if(ISNULL(@PubTime,'')<>'')		
begin
set @sql=@sql+ 'and PubTime>=DATEADD(MONTH, DATEDIFF(MONTH, 0,'''+cast(@PubTime as nvarchar)+'''), 0)' --某月的第一天
set @sql=@sql+'and  PubTime<=DATEADD(MONTH, DATEDIFF(MONTH, -1,'''+cast(@PubTime as nvarchar)+'''), -1)' --某月的最后一天
end


exec(@sql)
print  @sql
 

 返回结果

二、使用sp_executesql

 比exec更加灵活,及支持字符串拼接的方式,并且 支持参数化

1.用拼接方法

获取小王出版的所有的书

代码如下(示例):

    declare @sql nvarchar(300)
    declare @AuthorName nvarchar(500)
    set @AuthorName='小王'
    set @sql = 'SELECT max(price) FROM book where  AuthorName='''+@AuthorName+''''
    --方式1
    exec sp_executesql @sql
    --方式二
    exec(@sql)
    print @sql
返回结果

2.传参的方法

    比如 输出小王共计出版了多少本书,并用一个变量接收

代码如下(示例):

    declare @sql nvarchar(300)
    declare @AuthorName nvarchar(500)
	declare @Num int;
    set @AuthorName='小王'
    set @sql = 'SELECT @Num=count(1) FROM book where  AuthorName=@AuthorName'
    exec sp_executesql @sql,N'@AuthorName nvarchar(300),@Num int out', @AuthorName, @Num  out
    
	--exec(@sql)
	select @Num as 数量
	PRINT @Num 
返回结果


三、应用上

 支持在存储过程里使用,不支持在FUNCTIO函数的使用

 在表值函数使用exec、sp_executesql

 代码如下(示例):

CREATE FUNCTION fntest
(
@AuthorName nvarchar(500)
)
RETURNS 
@t TABLE 
(
	   [Id] int 
      ,[AuthorName] nvarchar
      ,[Price] float
      ,[PubTime] datetime
      ,[Title]  nvarchar
)
AS
BEGIN
	
    declare @sql nvarchar(300)
    set @sql = 'insert into @t SELECT * FROM book where  AuthorName='''+@AuthorName+''''
    --方式1
	insert into @t
    exec sp_executesql @sql
    --方式二
    exec(@sql)
    print @sql
	
	RETURN 
END

返回结果

 

总结

exec 只适用于拼接的方式,而sp_executesql更加灵活,不仅用拼接方式,而且支持参数化

exec、sp_executesql 动态拼接的方式 适用在存储过程中使用,不支持在表值函数、标量函数中使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/587957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac安装python

接上集&#xff0c;我们已经安装了Homebrew 那么在 macOS 上安装 Python 有多种方法&#xff0c;以下是其中两种常用方法&#xff1a; 1&#xff1a;使用 Homebrew 安装 Python Homebrew 是 macOS 上的包管理器&#xff0c;可以方便地安装和管理各种软件包。如果您已经安装了…

美国E8267C是德(KEYSIGHT) E8267D 20G/44G矢量信号发生器

Agilent E8267C、Keysight E8267D、 PSG 矢量信号发生器&#xff0c;高达 44 GHz ​Keysight E8267D (Agilent) PSG 矢量信号发生器是业界首款 I/Q 调制高达 44 GHz 的集成微波矢量信号发生器。它具有先进的宽带内部基带发生器&#xff0c;能够灵活地播放任意波形或生成复杂的…

在Windows11上模拟运行Linux命令的几种方式

在 Windows 上运行 Linux 命令的软件有很多&#xff0c;以下是其中几个比较常用的&#xff1a; Cygwin Cygwin 是一个为 Windows 提供类 Unix 环境的开源软件&#xff0c;它包含了大量的 Unix 工具和命令&#xff0c;可以在 Windows 上运行 Linux 命令。 安装命令 winget i…

【Java 继承】了解Java类的继承的特点,继承的关系,继承的使用,到底什么是继承?

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; Java | 从入门到入坟 Java 继承 继承的特点 \ 介绍 ❓特点 ♊ 继承的使用方式 &#x1f51e;避免重复方法 子类访问父类的成员变量 &#x1f232;子类访问父类的成员变量&#xff08;直接访问&#xff09;访问父类与子类…

MapReduce实战案例(3)

案例三: MR实战之TOPN(自定义GroupingComparator) 项目准备 需求测试数据 有如下订单数据 订单id商品id成交金额Order_0000001Pdt_01222.8Order_0000001Pdt_0525.8Order_0000002Pdt_03522.8Order_0000002Pdt_04122.4Order_0000002Pdt_05722.4Order_0000003Pdt_01222.8 现在…

6 具有 OCR 功能的顶级 PDF 图像转 Word 转换器

如果您在 PDF 图像中找到一些有用的信息并想转换为 Word 格式以供进一步使用&#xff0c;您将需要一个具有OCR 功能的 PDF 图像转 Word 转换器&#xff0c;该转换器旨在识别 PDF 图像中的文本并将其制作出来可编辑。 将 PDF 图像转换为 Word 并不容易&#xff0c;因为我们需要…

高压放大器工作原理(高压放大器怎么用的)

高压放大器是一种能够将低电平信号放大到足够高的电平&#xff0c;以便用于驱动大功率负载或处理高电压信号的电子设备。它广泛应用于各种电子设备中&#xff0c;例如音频放大器、射频放大器、电力电子设备等。下面我们将详细介绍高压放大器的工作原理以及使用方法。 高压放大器…

一分钟:GTP鼓谱导出转换MIDI格式教程

const loadPromise self.osmd.load("/resource/test");loadPromise.then(function () {self.osmd.render();});作为一名鼓手&#xff0c;我深知鼓谱转换MIDI格式的重要性&#xff0c;但是找了好久&#xff0c;一直没有找到一个好用的工具。 直到我发现了GTP鼓谱转换…

下载YouTube视频的一种方法

文章目录 工具名称下载方法使用方法1.只下载音频2.下载音频转换成mp3&#xff08;加上-x –audio-format参数&#xff09;3.下载视频&#xff08;带音频&#xff09;ID&#xff1a;22 | EXT&#xff1a;mp4 | 1280*720 下载的数据集&#xff1a;YouCook2 工具名称 yt-dlp 下载…

doxygen使用: 跨平台方式让markdown文件包含另一个文件

文章目录 1. 目的和问题2. 解决思路2.1 FILTER_PATTERNS 选项2.2 基于 Python 的 FILTER_PATTERNS 选项2.3 sledcpp.py 脚本 3. 完整工程3.1 目录结构3.2 hello.h 文件内容3.3 CHANGELOG.md 文件内容3.4 generate_doxyfile.py 文件内容3.5 docs/root.md3.6 docs/changelog.md3.…

Redis 事务详细介绍

事务 注意&#xff1a;Redis单条命令是保证原子性的&#xff1b;但是事务不保证原子性&#xff01; Redis事务没有隔离级别的概念&#xff0c;所有的命令在事务中&#xff0c;并没有直接被执行&#xff0c;只有发起执行命令时才执行 Redis事务本质&#xff1a;一组命令的集合&…

API接口对接的流程和注意的事项

API接口对接是将两个应用程序或系统连接并进行数据交换的过程。在进行API接口对接时&#xff0c;需要确保两个系统具有相同的协议和格式&#xff0c;并且数据传输过程中不会出现错误或数据丢失。下面是API接口对接的流程和注意事项&#xff1a; 流程&#xff1a; 1.确认数据格…

【多目标优化算法】多目标蚱蜢优化算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Linux——进程退出

目录 一.进程退出时有三种选择&#xff1a; 1.1 echo $?命令&#xff1a; 功能&#xff1a; 打印距离现在最近一次执行某进程的退出码 例2代码&#xff1a; 例3&#xff1a; 例4代码&#xff1a; 1.3 进程运行过程中可能会出现的错误种类&#xff1a; 二.总结&#xff…

神经网络学习小记录73——Pytorch CA(Coordinate attention)注意力机制的解析与代码详解

神经网络学习小记录73——Pytorch CA&#xff08;Coordinate attention&#xff09;注意力机制的解析与代码详解 学习前言代码下载CA注意力机制的概念与实现注意力机制的应用 学习前言 CA注意力机制是最近提出的一种注意力机制&#xff0c;全面关注特征层的空间信息和通道信息…

Unity随手问题记录(持续更新~~)

目录 1.将摄像机定位到模型实际中心点前边&#xff08;防止有些模型中心点和实际模型中心位置偏移很大的情况&#xff09; 2.获取当鼠标在RawImage上时&#xff0c;鼠标位置对应的图像坐标(简单粗暴方式) 3.设置脚本运行顺序 4.当plugins底下出现dll文件识别不到的情况&#xf…

LeetCode 1110. Delete Nodes And Return Forest【二叉树,DFS,哈希表】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

SKD240

SKD240 系列智能电力仪表 SKD240 系列智能电力仪表是陕西斯科德智能科技有限公司自主研发、生产的。 产品概述 - 点击了解详情 SKD240采用先进的微处理器和数字信号处理技术&#xff08;内置主芯片采用32位单片机, 采用32位浮点型真有效值处理数据&#xff09;&#xff0c;测量…

图像采集卡的基本原理、应用领域和发展趋势

图像采集卡是一种硬件设备&#xff0c;用于将模拟视频信号转换为数字信号&#xff0c;并将其传输到计算机中进行处理和存储。它通常用于监控、视频会议、医学图像等领域。本文将介绍图像采集卡的基本原理、应用领域和发展趋势。 一、图像采集卡的基本原理 图像采集卡的基本原…

视频里的声音怎么转换成音频?

视频里的声音怎么转换成音频&#xff1f;这样我们就能把视频里的想要的声音在其他音频平台播放或是用于其他视频。其实视频提取音频是一种将视频文件中的音频数据分离出来的技术。该技术可以将视频中的音频转换为不同的格式&#xff0c;让我们可以在无需视频的情况下使用音频文…