1 普通sql语句可以用exec执行,如:

SELECT * FROM video

EXEC ('SELECT * FROM video')

EXEC sp_executesql N'SELECT * FROM video' --字符串前一定要加N

2 字段名,表名,数据库名之类作为变量时,必须用动态sql

DECLARE @fname NVARCHAR()
SET @fname = 'Name'
SELECT @fname FROM Video
--以上结果为Name,并非所要

可以使用这样动态拼接:

EXEC(' select ' + @fname + ' from video')--注意加号前后的单引号都加上空格
--当然将字符串形式改成变量也可以
DECLARE @sql NVARCHAR(MAX)
DECLARE @fname NVARCHAR()
SET @fname = '[SeoFilename]'
set @sql = 'SELECT ' + @fname + ' FROM Video AS v'
EXEC (@sql)--一定要记得这个小括号 ,这里的@sql是varchar类型可以

注意:也可以使用 exec sp_executesql 形式

EXEC sp_executesql @sql -- 注意:@sql必须是ntext,nchar,nvarchar类型,不可以是varchar类型         

3 输入或者输出参数

动态查询语句变量:必须为ntext,nchar,nvarchar类型

设置动态语句中的查询字符串,必须为ntext,nchar,nvarchar类型

declare @input_id int--定义需传入动态语句的参数的值,参数1
declare @input_name varchar()--定义需传入动态语句的参数的值,参数2
DECLARE @QueryString NVARCHAR(MAX)--动态语句变量
DECLARE @paramstring NVARCHAR()--设置动态语句中的动态字符串参数
-- --
set @QueryString='select * from Video where id=@id and SeoFilename=@name' --id与name为字段名,@id与@name为要传入的参数
set @paramstring='@id int,@name varchar(20)' --设置动态语句中参数的定义的字符串,多个参数用"
-- set @input_id = --设置需传入动态语句的参数的值为1
set @input_name='新增视频一' --设置需传入动态语句的参数的值为"张三"
exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name --请注意参数的顺序

4 输出参数

DECLARE @num INT,@sql NVARCHAR(MAX)
SET @sql = 'select count(1) from Video'
EXEC(@sql)

如何将总数的结果返回给一个变量呢?

DECLARE @QueryString NVARCHAR(MAX)
DECLARE @ParamString NVARCHAR()
DECLARE @output_result INT --查询结果返回给它 SET @QueryString = ' select @totalcount = count(1) from video '--定义@totalcount为输出结果参数
SET @ParamString = ' @totalcount int output ' EXEC sp_executesql @QueryString,@ParamString,@totalcount = @output_result OUTPUT
SELECT @output_result AS '返回总数'

另外,动态语句查询的结果集要输出的话,可以使用临时表的方法

先判断临时表是否存在

   IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判断临时表#tmp是否存在,存在则删除
drop table #tmp

  IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判断临时表#tmp是否存在,存在则删除
  drop table #tmp

  SELECT * INTO #tmp FROM Video AS v

  SELECT * FROM #tmp AS t


sqlserver数据库中用到的Identity列

当表中被删除了某些数据,自增长的编号就不再是一个连线的数据

可以使用 SET IDENTITY_INSERT Video ON
允许将显式值插入到表的标示列中,当设置为on,这时可能在insert 操作时候手动指定插入到标示列中的序号,,同时必须在完成操作后,将IDENTITY_INSERT 还原成off
否则,下次插入的时候必须指定编号,不然就无法完成Insert操作

当表中的记录被全部删除,但此时标示列的值很大很大,如果不重置,会无休止的增长,这个时候可以用:DBCC CHECKIDENT(Video, [RESEED|NORESEED], [1]) 进行重置

--重置表中标识列中种子值
DBCC CHECKIDENT(Video, [RESEED|NORESEED], []) --获取当前表中标示列的种子值
DBCC CHECKIDENT(Video,NORESEED)

动态sql语句基本语法的更多相关文章

  1. 动态sql语句基本语法--Exec与Exec sp_executesql 的区别

    http://www.cnblogs.com/goody9807/archive/2010/10/19/1855697.html 动态sql语句基本语法 1   :普通SQL语句可以用Exec执行   ...

  2. [SQL]动态sql语句基本语法

    动态sql语句基本语法 :普通SQL语句可以用Exec执行 eg: Select * from tableName Exec('select * from tableName') Exec sp_ex ...

  3. MyBatis学习总结_11_MyBatis动态Sql语句

    MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...

  4. MySQL基础----动态SQL语句

    尊重原创:http://blog.csdn.net/abc19900828/article/details/39501643   动态sql语句基本语法 1 :普通SQL语句可以用Exec执行 eg: ...

  5. MyBatis学习总结(11)——MyBatis动态Sql语句

    MyBatis中对数据库的操作,有时要带一些条件,因此动态SQL语句非常有必要,下面就主要来讲讲几个常用的动态SQL语句的语法 MyBatis中用于实现动态SQL的元素主要有: if choose(w ...

  6. mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

    mybatis 的动态sql语句是基于OGNL表达式的.可以方便的在 sql 语句中实现某些逻辑. 总体说来mybatis 动态SQL 语句主要有以下几类:1. if 语句 (简单的条件判断)2. c ...

  7. MyBatis学习(三)、动态SQL语句

    三.动态SQL语句 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.使用Orac ...

  8. 三、动态SQL语句

    //备注:该博客引自:http://limingnihao.iteye.com/blog/106076 有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空, ...

  9. 存储过程中执行动态Sql语句

    MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有.还有一个最大的好处就 ...

随机推荐

  1. rqnoj-396-SY学语文-dp

    纯动态规划. 注意初始化为-INF #include<stdio.h> #include<algorithm> #include<iostream> #includ ...

  2. Ehcache(02)——ehcache.xml简介

    http://haohaoxuexi.iteye.com/blog/2113728 ehcache.xml简介 ehcache.xml文件是用来定义Ehcache的配置信息的,更准确的来说它是定义Ca ...

  3. ecshop的smarty库还原成smarty原生库方法

    写过ecshop模板的人都晓得,他们是用所谓的dwt的文件来嵌套lbi文件进行模板的彼此调用.在咱们调取数据的时分,ecshop的默许模板只提供给咱们几个简略的句子进行调用,那么有没有办法能够把这个精 ...

  4. JQuery ajax请求一直返回Error(parsererror)

    $.ajax({ type :"post", url :"busine_in.action", timeout : 40000, data: "cen ...

  5. contiki makefile框架分析 < contiki学习之一 >

    在linux下的工程编译,基本都可以使用makefile这个工具来完成.Contiki OS亦如此,下面分析contiki整个Makefile的框架,对makefile的具体内容暂不做分析.本文依赖于 ...

  6. 【转】selenium简介及安装方法

    转自:http://www.cnblogs.com/fnng/p/3157639.html 1. selenium 介绍 selenium 是一个web 的自动化测试工具,不少学习功能自动化的同学开始 ...

  7. 【转】移动端App测试实用指南

    转自:互联网那点事 英文原文: http://mobile.smashingmagazine.com/2012/10/22/a-guide-to-mobile-app-testing/ 测试人员常被看 ...

  8. 很近没读书了,读书笔记之<<大道至简>>

    空闲时间不想虚度,不知道干啥的时候,就读读存在移动硬盘里的电子书吧,已经放了N久了,不知道什么时候放的,好像是大学刚毕业的时候下载的,...... 好久...... 现在才去读..是不是太晚了.... ...

  9. Codeforces Round #330 (Div. 1) C. Edo and Magnets 暴力

    C. Edo and Magnets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/594/pr ...

  10. webqq 获得好友列表hash算法 获得最新hash的方法

    webqq获得好友列表的hash算法,大约每一个月中旬会变动一次.知道怎么获得他就能够了. js文件路径 http://web.qstatic.com/webqqpic/pubapps/0/50/eq ...