`
shirlly
  • 浏览: 1623744 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

第一次写动态SQL的得到的经验

SQL 
阅读更多
前言
引用

用动态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)
分享到:
评论

相关推荐

    C#封装MySql数据库操作,反射动态生成SQL语句

    这是我第一次写数据库的程序,我知道有很多地方写得不好,希望能得到大家的指点。我的联系方式,邮箱:tqwboy@163.com;QQ:55346161(请注明CSDN);blog:tqwboy.blog.163.com 欢迎“骚扰”。

    SQL21日自学通

    第一天SQL 简介 17 SQL 简史 17 数据库简史 17 设计数据库的结构21 SQL 总览23 流行的SQL 开发工具 24 SQL 在编程中的应用 27 第二天查询— — SELECT 语句的使用 30 目标 30 背景 30 一般的语法规则 30 你的第一个...

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

     是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作  全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。   本系列图书中文版得到了微软...

    经典SQL语句大全

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别.doc

    说通俗一点就是:如果用 EXEC 执行一条动态 SQL 语句,由于每次传入的参数不一样,所以每次生成的 @sql 就不一样,这样每执行一次SQL SERVER 就必须重新将要执行的动态 Sql 重新编译一次 。但是SP_EXECUTESQL 则不...

    经典全面的SQL语句大全

     假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的...

    sql经典语句一部分

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    sql server sqldmo_x86_x64(C#数据库备份还原很好用的dll)

    第一步:首先将msvcr71.dll, SQLDMO.DLL, Resources\2052\sqldmo.rll,Resources\1033\sqldmo.rll 拷贝到C:\Program Files\Microsoft SQL Server\80\Tools\Binn目录。 下载SQLDMO文件 第二步:打开开始,在运行中...

    SQL语法大全

    rs.absolutepage=N 将记录指针移到第N页的第一行 rs.pagesize=N 设置每页为N条记录 rs.pagecount 根据 pagesize 的设置返回总页数 rs.recordcount 返回记录总数 rs.bof 返回记录指针是否超出数据表首端,true表示是...

    MYSQL,SQLSERVER,ORACLE常用的函数

    返回字符串并将字符串的第一个字母变为大写; SQL&gt; select initcap('smith') upp from dual; UPP ----- Smith 5.INSTR(C1,C2,I,J) 在一个字符串中搜索指定的字符,返回发现指定的字符的位置; C1 被搜索的字符...

    SQL Server 2005示例数据库 安装包 [免费版]

    3、单击增加按钮,然后确定要增加的数据库位置(也可以一次加入多个数据库)。 连接数据库的注意事项 虽然在 SQL Server 2005中文件的结构已经发生了改变,你仍然可以连接SQL Server 2000 的数据库。但是只有...

    ASP EXCEL导入SQL

    Rails框架(从版本1.2.x起)成为了第一个引入REST作为核心思想的主流网络软件开发框架。在Rails框架的充分利用了REST软件架构之后,人们更加坚信REST的重要性和必要性。Rails利用REST软件架构思想对网络服务也提供了...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    ORACLE SQL性能优化系列

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...

    oracle_sql性能优化

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...

    数据库操作语句大全(sql)

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 ...

    超实用sql语句

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    最好的asp CMS系统科讯CMSV7.0全功能SQL商业版,KesionCMS V7.0最新商业全能版-免费下载

    这种好处当您的栏目下有上万篇文章时越是明显,因为每次生成时不需要将所有页面重新生成一次,只需要根据预设定的生成最新更新的记录即可! 3、 系统由文章、图片、下载、分类信息、商城、求职招聘、影视、动漫...

Global site tag (gtag.js) - Google Analytics