前言
引用
用动态SQL写存储过程的原因,项目中有个存储过程必须把字段名作为变量,而
字段名,表名,数据库名之类作为变量时,必须用动态SQL ,所以就开始学习写动态SQL
写动态SQL 注意事项
引用
动态串中:
(1)用两个单引号表示一个。
(2)日期需要用单引号。
(3)日期型需要先转换为字符型,用cast()或convert()。eg:Convert(Varchar(10),@BeginDate,120)
(4)数字型需要先转换为字符型。 用Rtrim(数字型变量)(注意,这里虽然转成了字符串,但在动态SQL串中不不用单引号引起来)
这个是@SQL前为什么要加N的解释(现在还不太明白什么意思)
引用
包含 Transact-SQL 语句或批处理的 Unicode 字符串,stmt 必须是可以隐式转换为 ntext 的 Unicode 常量或变量。不允许使用更复杂的 Unicode 表达式(例如使用 + 运算符串联两个字符串)。不允许使用字符常量。如果指定常量,则必须使用 N 作为前缀。例如,Unicode 常量 N'sp_who' 是有效的,但是字符常量 'sp_who' 则无效。字符串的大小仅受可用数据库服务器内存限制。
stmt 可以包含与变量名形式相同的参数,例如:
N'SELECT * FROM Employees WHERE EmployeeID = @IDParameter'
示例代码:
DECLARE @SearchType varchar(20)
IF @SearchTypeID = 1
SET @SearchType = 'Name' --根据主题查询
ELSE IF @SearchTypeID = 2
SET @SearchType = 'FromAddress'--根据发件人查询
ELSE IF @SearchTypeID = 3
SET @SearchType = 'TOAddress' --根据收件人查询
DECLARE @SqlWhere varchar(1000)
SET @SqlWhere= 'WHERE UserName ='''+@UserName+''''
IF @FolderID <>0 --如果不是搜索所有的邮件,就按文件夹的ID搜索
SET @SqlWhere = @SqlWhere+' AND FolderID = '+Rtrim(@FolderID)
IF @BeginDateStr <>'' --按日期搜索
SET @SqlWhere = @SqlWhere+' AND (CreateDate between '''+@BeginDateStr+''' AND '''+ @EndDateStr+''') '
IF @Key <>'' --按关键字搜索
SET @SqlWhere = @SqlWhere+' AND '+@SearchType +' LIKE ''%'+@Key+'%'''
DECLARE @SQL VARCHAR(400)
SET @SQL = N'SELECT * FROM AjaxMail '+@SqlWhere
---- 执行语句 ----
EXEC(@SQL)
分享到:
相关推荐
这是我第一次写数据库的程序,我知道有很多地方写得不好,希望能得到大家的指点。我的联系方式,邮箱:tqwboy@163.com;QQ:55346161(请注明CSDN);blog:tqwboy.blog.163.com 欢迎“骚扰”。
第一天SQL 简介 17 SQL 简史 17 数据库简史 17 设计数据库的结构21 SQL 总览23 流行的SQL 开发工具 24 SQL 在编程中的应用 27 第二天查询— — SELECT 语句的使用 30 目标 30 背景 30 一般的语法规则 30 你的第一个...
是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作 全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。 本系列图书中文版得到了微软...
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...
说通俗一点就是:如果用 EXEC 执行一条动态 SQL 语句,由于每次传入的参数不一样,所以每次生成的 @sql 就不一样,这样每执行一次SQL SERVER 就必须重新将要执行的动态 Sql 重新编译一次 。但是SP_EXECUTESQL 则不...
假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的...
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...
第一步:首先将msvcr71.dll, SQLDMO.DLL, Resources\2052\sqldmo.rll,Resources\1033\sqldmo.rll 拷贝到C:\Program Files\Microsoft SQL Server\80\Tools\Binn目录。 下载SQLDMO文件 第二步:打开开始,在运行中...
rs.absolutepage=N 将记录指针移到第N页的第一行 rs.pagesize=N 设置每页为N条记录 rs.pagecount 根据 pagesize 的设置返回总页数 rs.recordcount 返回记录总数 rs.bof 返回记录指针是否超出数据表首端,true表示是...
返回字符串并将字符串的第一个字母变为大写; SQL> select initcap('smith') upp from dual; UPP ----- Smith 5.INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符...
3、单击增加按钮,然后确定要增加的数据库位置(也可以一次加入多个数据库)。 连接数据库的注意事项 虽然在 SQL Server 2005中文件的结构已经发生了改变,你仍然可以连接SQL Server 2000 的数据库。但是只有...
Rails框架(从版本1.2.x起)成为了第一个引入REST作为核心思想的主流网络软件开发框架。在Rails框架的充分利用了REST软件架构之后,人们更加坚信REST的重要性和必要性。Rails利用REST软件架构思想对网络服务也提供了...
他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...
为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...
为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 ...
3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...
这种好处当您的栏目下有上万篇文章时越是明显,因为每次生成时不需要将所有页面重新生成一次,只需要根据预设定的生成最新更新的记录即可! 3、 系统由文章、图片、下载、分类信息、商城、求职招聘、影视、动漫...