广告
返回顶部
首页 > 资讯 > 精选 >SQL Server中怎么执行动态SQL
  • 499
分享到

SQL Server中怎么执行动态SQL

2023-06-30 15:06:01 499人浏览 安东尼
摘要

这篇“sql Server中怎么执行动态SQL”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL Se

这篇“sql Server中怎么执行动态SQL”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL Server中怎么执行动态SQL”文章吧。

SQL Server查询语句中使用变量表示表名、字段名等动态查询方式叫动态查询。

当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句,用得比较多的地方就是分页存储过程和执行搜索查询的SQL语句。

一个比较通用的分页存储过程,可能需要传入表名,字段,过滤条件,排序等参数,而对于搜索的话,可能要根据搜索条件判断来动态执行SQL语句。

在SQL Server中有两种方式来执行动态SQL语句,分别是sp_executesql和exec。

sp_executesql相对而言具有更多的优点,它提供了输入输出接口,可以将输入输出变量直接传递到SQL语句中,exec只能通过拼接的方式来实现,安全性没有executesql高。还有一个优点就是sp_executesql,能够重用执行计划,这就大大提高了执行的性能。所以一般情况下建议选择sp_executesql来执行动态SQL语句。

一、sp_executesql存储过程(推荐)

使用存储过程,提供了输入输出的接口,语句可以重用执行。  

使用sp_executesql需要注意它后面执行的SQL语句必须是Unicode编码的字符串,所以在声明存储动态SQL语句的变量时必须声明为nvarchar类型,否则在执行的时候会报“过程需要类型为 'ntext/nchar/nvarchar' 的参数 '@statement'”的错误,如果是使用sp_executesql直接执行SQL语句,则必须在前面加上大写字母N,以表明后面的字符串是使用Unicode类型编码的。

语法:

sp_executesql [ @stmt = ] statement  [     { , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' }        { , [ @param1 = ] 'value1' [ ,...n ] }  ]

1、简单的查询

declare @TableName varchar(50), @SqlString nvarchar(200), @CourseID int;set @TableName = '课程表';set @CourseID = 1;set @SqlString = N'select * from ' + quotename(@TableName) + N'where ID = ' + cast(@CourseID as varchar(10));exec sp_executesql @SqlString;

2、使用输入参数

declare @sql as nvarchar(100);set @sql = N'SELECT orderid,custid,empid,orderdate FROM Sales.Orders WHERE <a href="mailto:orderid=@orderid;'" rel="external nofollow"   target="_blank">orderid=@orderid;</a>';exec sys.sp_executesql @stmt = @sql, @params = N'@orderid AS INT', @orderid = 10248;

3、带输出参数的SQL语句

create procedure sp_GetNameByUserId(@userId varchar(100), @userName varchar(100) output)as declare @sql nvarchar(1000); set @sql=N'select @userName=UserName from Student where UserId=@userId'; exec sp_executesql @sql,N'@userId varchar(100),@userName varchar(100) output', @userId, @userName output;select @userName;

综合实例:两个输入参数和一个输出参数

declare @count          int,        @tableName      nvarchar(50),        @SQLString      nvarchar(max),        @proid          int,        @id             int,        @ParmDefinition nvarchar(max);set @tableName=N'mytable';set @proid=433;set @id=159;--set @sql=N'select @count=count(empid) from table27'set @SQLString=N'select @countOUT=count(empid) from '               + @tableName               + N' where proid=@proid1 and id<@id1';set @ParmDefinition=N'@proid1 int,@id1 int,@countOUT   int   output';exec sp_executesql  @SQLString,  @ParmDefinition,  @proid1=@proid,  @id1=@id,  @countOUT=@count output;select @count;

二、EXEC命令

支持普通字符和Unicode字符。exec没有输入输出参数,只能通过拼接的方式来实现。注意转义字符&lsquo;的使用。

declare @sql as nvarchar(100);set @sql = N'PRINT ''这条消息是动态SQL命令打印的.'';';exec (@sql);declare @sql as nvarchar(100);declare @OrderIDs as nvarchar(50) = N'10248,10249,10250';set @sql = N'SELECT * FROM Sales.Orders WHERE orderid IN (' + @OrderIDs + N');';exec (@sql);

以上就是关于“SQL Server中怎么执行动态SQL”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: SQL Server中怎么执行动态SQL

本文链接: https://www.lsjlt.com/news/329721.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SQL Server中怎么执行动态SQL
    这篇“SQL Server中怎么执行动态SQL”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SQL Se...
    99+
    2023-06-30
  • Oracle中执行动态SQL
    一、概述 在一般的sql操作中,sql语句基本上都是固定的,如: SELECT t.empno,t.ename FROM scott.emp t WHERE...
    99+
    2022-11-13
  • SQLServer中执行动态SQL
    在Sql Server查询语句中使用变量表示表名、字段名等动态查询方式叫动态查询。 当需要根据外部输入的参数来决定要执行的SQL语句时,常常需要动态来构造SQL查询语句,用得比较多的...
    99+
    2022-11-13
  • SQL Server中怎么执行计划缓存
    SQL Server中怎么执行计划缓存,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。基础概念SQL Server 有一个用于存储执行计划和数据...
    99+
    2022-10-18
  • plsql EXECUTE IMMEDIATE动态执行sql
    select * from BANK t; DECLARE v_money bank.money%TYPE; BEGIN --简单执行sql,注意sql字符串不要带分号结束 EXECUTE IMMEDIATE "S...
    99+
    2015-12-31
    plsql EXECUTE IMMEDIATE动态执行sql
  • SQL Server中怎样执行计划缓存
    今天就跟大家聊聊有关SQL Server中怎样执行计划缓存,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。参数化和非参数化查询计划的唯一标识是查询语句...
    99+
    2022-10-18
  • SQL Server的执行计划是什么
    本文小编为大家详细介绍“SQL Server的执行计划是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL Server的执行计划是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一...
    99+
    2023-07-06
  • SQL Server中怎么使用ISNULL执行空值判断查询
    SQL Server中怎么使用ISNULL执行空值判断查询,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。有如下查询:复制代码 ...
    99+
    2022-10-18
  • Django中怎么执行原生SQL
    这期内容当中小编将会给大家带来有关Django中怎么执行原生SQL,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。表结构文件:django_project/app01/mo...
    99+
    2022-10-18
  • 使用SpringAop动态获取mapper执行的SQL,并保存SQL到Log表中
    目录1.背景2.难点3.实现3.1ModelSumbit.java3.2LogAdvice.java3.3SqlUtils.java4.注意事项总结1.背景 工作的时候遇到一个这样的...
    99+
    2023-03-07
    SpringAop动态获取SQL mapper执行SQL 保存SQL到Log表
  • SQL Server中怎么删除重复行
    今天就跟大家聊聊有关SQL Server中怎么删除重复行,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.如果有ID字段,就是具有唯一性的字段复制代...
    99+
    2022-10-18
  • dbvisualizer怎么执行sql语句
    要在DBVisualizer中执行SQL语句,可以按照以下步骤操作:1. 连接到数据库:在DBVisualizer中,选择菜单栏的"...
    99+
    2023-10-19
    sql
  • psql怎么执行sql语句
    在psql中执行SQL语句有以下几种方式: 在命令行中直接输入SQL语句: psql -c "SELECT * FROM...
    99+
    2023-10-26
    psql sql
  • clickhouse怎么执行sql文件
    在ClickHouse中,可以使用以下命令执行SQL文件: 进入ClickHouse客户端: clickhouse-client...
    99+
    2023-10-23
    clickhouse sql
  • SQL中怎么执行进展优化
    这篇文章将为大家详细讲解有关SQL中怎么执行进展优化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。聚集索引扫描SELECT * ...
    99+
    2022-10-18
  • 怎么在MyBatis中执行SQL语句
    这期内容当中小编将会给大家带来有关怎么在MyBatis中执行SQL语句,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。基础组件我们要理解 Mybatis 的执行过程,就必须先了解 Mybatis 中都有哪一...
    99+
    2023-06-15
  • 如何使用SpringAop动态获取mapper执行的SQL并保存SQL到Log表中
    本文小编为大家详细介绍“如何使用SpringAop动态获取mapper执行的SQL并保存SQL到Log表中”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用SpringAop动态获取mapper执行的SQL并保存SQL到Log表中”文...
    99+
    2023-07-05
  • DB2 存储过程中执行动态SQL的两种写法
    样本代码: DROP PROCEDURE QUOTATION.COPY_SAMPLE; CREATE PROCEDURE QUOTATION.COPY_SAMPLE ( IN tableNa...
    99+
    2022-10-18
  • MyBatis中怎么实现动态SQL!
    这篇文章将为大家详细讲解有关MyBatis中怎么实现动态SQL!,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、if标签if是最常用标签,经常用在判断语句...
    99+
    2022-10-18
  • sql server中怎么拼接多行数据
    这篇文章将为大家详细讲解有关sql server中怎么拼接多行数据,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.表结构idtypeproductCode...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作