动态SQL实现与注意事项(有返回值与无返回值动态SQL 实现)

1、分类

当执行的SQL语句需传入变量时,必须使用SQL 动态语句实现;

动态语句分两种情况:

(1)有返回值动态SQL

(2)无返回值动态SQL

2、实现

假设存在一个学生表,具有UserID, UserName两列,属性为INT 与VARCHAR(20)

2.1 普通SQL 语句实现

SELECT UserID, UserName FROM StdTable WHERE UserID=123;

2.2 动态SQL 实现

--根据输入的ID查询出相应数据
DECLARE @ID INT
DECLARE @SQL VARCHAR(100)
SET @SQL = ‘ SELECT UserID, UserName FROM StdTable WHERE UserID=‘+@ID+‘‘;
EXEC(@SQL)
--假如执行错误,用ltrim()函数
SET @SQL = ‘ SELECT UserID, UserName FROM StdTable WHERE UserID=‘+ltrim(@ID)+‘‘;

注意:在以上查询语句中,若传入的是VARCHAR型数据,需在变量两边多加入一对引号

如:

SET @SQL = ‘ SELECT UserID, UserName FROM StdTable WHERE UserID=‘‘‘+UserName +‘‘‘ ‘;
EXEC(@SQL)

2.3 有返回值SQL

假如需要将select出的结果返回给某一变量,需使用如下语句:

SET @SQL  =  N‘SELECT @UserNameTemp =  (SELECT  UserName FROM ‘+@TableName+ ‘ WHERE UserID=‘+@UserID+‘)‘
-- print @TempAASQL
EXEC SP_EXECUTESQL @SQL ,N‘@NameTemp  Varchar(20) OUT ‘,@UserNameTemp =@UserName

有返回值与无返回值的不同之处:

(1)无返回值的执行sql定义为:VARCHAR(1000)

DECLARE @SQL VARCHAR(1000)

而无返回值定义为NVARCHAR(1000)

DECLARE @SQL NVARCHAR(1000)

(2)有返回值SQL,具体执行时,需在语句前加N

(3)必须调用系统存储过程SP_EXECUTESQL 执行

时间: 2024-10-14 02:21:02

动态SQL实现与注意事项(有返回值与无返回值动态SQL 实现)的相关文章

Android——关于Activity跳转的返回(无返回值和有返回值)——无返回值

一.无返回值 跳转页面,并将第一页的Edittext输入的数据通过按钮Button传到第二页用Edittext显示,点击第二页的 返回按钮Button返回第一页(改变第二页的Edittext的内容不能返回至第一页) ——普通方式,没有返回值的方式 1.给第一页面Edittext和Button设置id 2.设置Button的点击监听 (1)获取view实例,通过Edittext的id找到Edittext (2)获取内容并转为文本形式 getText().toString() (3)设置Intent

关于dfs中有返回值和无返回值两种写法的问题

我之前写dfs,都是使用一个全局变量,然后在递归边界去修改这个全局变量,这很好理解.但是有返回值的dfs怎么写呢? 这个问题我一直没有去解决,而是一直用的全局变量的方法,而其实有返回值的写法也很简单. 比如下面的代码. s表示起点,e表示终点,我们每次只能前进一格或者两格,求我们到达终点有多少种方法.有返回值的也很简单,存储好不同分支的结果,相加直接返回即可.这里还是要记住递归的关键点,边界条件,和只思考本层的递归式.如果再思考下一层如何运行的,很容易被绕进去. def routenum(s,

sql优化(oracle)- 第二部分 常用sql用法和注意事项

第二部分 常用sql用法和注意事项               1. exists 和 in                             2. union 和 union all                       3. with as  4. order by  5. group by  6. where 和 having  7. case when 和 decode 1.exits和in用法1)说明: 1. exists先对外表做循环,每次循环对内表查询:in将内表和外表

SQL性能优化注意事项

1.选用适合的Oracle优化器 Oracle的优化器共有3种: a.RULE(基于规则) b.COST(基于成本) c.CHOOSE(选择性) 设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE.COST.CHOOSE.ALL_ROWS.FIRST_ROWS.你当然也在SQL句级或是会话(session)级对其进行覆盖. 为了使用基于成本的优化器(CBO,Cost-Based Optimizer),你必须经常运行analyze命令,以增加数

Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询

原文:Linq to Sql:N层应用中的查询(下) : 根据条件进行动态查询 如果允许在UI层直接访问Linq to Sql的DataContext,可以省去很多问题,譬如在处理多表join的时候,我们使用var来定义L2S查询,让编译器自动推断变量的具体类型(IQueryable<匿名类型>),并提供友好的智能提示:而且可以充分应用L2S的延迟加载特性,来进行动态查询.但如果我们希望将业务逻辑放在一个独立的层中(譬如封装在远程的WCF应用中),又希望在逻辑层应用Linq to sql,则情

SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号

SQL Server之 (四) ADO增删查改  登录demo  带参数的sql语句  插入自动返回行号 自己学习笔记,转载请注明出处,谢谢!---酸菜 1.什么是ADO.NET ADO.NET是一组类库,这组类库可以让我们通过程序的方式访问数据库,并以各种方式操作存储在其中的数据; ADO.NET是基于.NET FrameWork,与.NET FrameWork类库的其余部分是高度集成的 2.连接数据库的步骤 ①创建连接字符串 Data Source=XXX-PC; Initial Catal

EF5中 执行 sql语句使用Database.ExecuteSqlCommand 返回影响的行数 ; EF5执行sql查询语句 Database.SqlQuery 带返回值

一: 执行sql语句,返回受影响的行数 在mysql里面,如果没有影响,那么返回行数为  -1 ,sqlserver 里面  还没有测试过 using (var ctx = new MyDbContext()) { ctx.Database.ExecuteSqlCommand("UPDATE Person SET Name = 'Michael' WHERE PersonID = 1"); } 二 : Database.SqlQuery<T>   EF5执行sql查询语句

Android--利用相机或相册截取用户头像(解决了miui无法截取,以及部分机型拍照无返回Uri)

声明 本文的Demo可用于从本地获取用户头像时使用,解决了有些手机系统相机拍照后获取不到拍摄照片的问题,以及解决小米miui系统调用系统裁剪图片功能camera.action.CROP后崩溃或重新打开app的问题. 修改了部分机型拍照后返回的是缩略图的临时文件的问题. 如何获得一张原图 先看代码: UtilClass.requestPermission(ChangeMyDataActivityCopy.this, android.Manifest.permission.CAMERA); choo

&lt;10&gt; 无参无返回值+ 无参有返回值函数的定义+有参无返回值函数定义+ 有参有返回值函数定义+函数的参数+函数的参数传递过程

无参无返回值: 1 #include <stdio.h> 2 3 4 /** 5 * 定义一个无参无返值函数 6 * 7 */ 8 void print_line(){ 9 10 printf("-----------------\n"); 11 12 } 13 14 15 16 int main(int argc, const char * argv[]) { 17 //调用函数 18 print_line(); 19 20 return 0; 21 } 无参有返回值函数