`
shirlly
  • 浏览: 1648000 次
  • 性别: 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 你的第一个...

    ORACLE SQL性能优化系列

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

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

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

    第一次性能测试后的经验总结

    ### 第一次性能测试后的经验总结 #### 一、性能测试流程方面 在进行性能测试之前,需要对业务流程有深入的了解,明确测试的目的和范围。对于初次接触性能测试的人来说,以下几点尤为重要: 1. **熟悉业务流程**:...

    ORACLE_高效SQL分析

    - **硬解析**:对于第一次执行的SQL语句,Oracle需要进行完整的解析过程,包括语法检查、语义检查等。 - **软解析**:如果SQL及其执行计划已经存在于SGA的共享池中,则可以直接使用,这种情况下称为软解析。 - **...

    经典SQL语句大全

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

    SQL查询二进制内容

    第一次转换是将`TOOLLIST`字段(假设其数据类型为其他类型)转换为`varbinary(8000)`,这意味着它会被视为一个最大长度为8000字节的二进制数据。第二次转换则是将得到的二进制数据再次转换为`varchar(8000)`类型,即...

    第一章 SQL Server 2000概述

    1992年,SQL Server首次登陆Windows NT平台,随后在1995年推出SQL Server 6.0,1998年发布SQL Server 7.0,最终在2000年,我们迎来了SQL Server 2000,这是其在功能和性能上的一次重大飞跃。 SQL Server 2000的核心...

    sql tuning

    - **使用 SQL 提示 (SQL Hints)**:SQL 提示是一种在 SQL 语句中加入特殊注释的方法,用于指导优化器选择特定的执行计划。本书介绍了一些常用的 SQL 提示,并解释了如何有效地使用它们。 - **性能监控工具**:除了...

    sql2000setup

    安装完成后,第一次启动SQL Server Management Studio(SSMS),可能需要进行一些初始配置,如设置sa账号的密码、创建新的数据库等。 ### `sql2000安装图解.doc` 这个文档很可能是对上述安装步骤的图文说明,它...

    DBA对Oracle SQL编写规范的总结

    - **规范要求**:当处理大量数据时,推荐使用游标来遍历结果集,而不是一次性加载所有数据到内存中。 - **示例**: ```plsql DECLARE CURSOR c_employees IS SELECT * FROM EMPLOYEE; v_employee EMPLOYEE%...

    SQL2008 JDBC驱动

    这个版本号表示它是2.0版的第1008次更新,"enu"代表"English",意味着这是英文版。安装后,驱动程序通常会放置在系统的类路径下,以便Java应用程序能够找到并加载它。 使用SQL2008 JDBC驱动连接数据库,你需要在...

    SQL Server 数据库实现定时自动备份

    6. **测试和监控**:在设置完成后,先手动执行一次作业以确保备份成功。之后通过查看“SQL Server 代理”-&gt;“历史”来监控备份作业的执行情况。 此外,还可以考虑使用第三方工具或者SQL Server维护计划来简化这个...

    SQL Developer User Guide

    - **运行 SQL 脚本**:可以上传包含多个 SQL 命令的脚本文件并一次性执行。 #### 四、PL/SQL 编辑与调试 - **编辑 PL/SQL 代码**:提供专门的编辑器来编写 PL/SQL 代码,支持语法高亮等功能。 - **调试 PL/SQL 代码...

    sqlserver试题含答案.doc

    答:存储过程是一个预编译的 SQL 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次 SQL,使用存储过程比单纯 SQL 语句执行要快。可以用一个命令 exec 来...

    niit sql考试题目

    例如,第一题可能要求考生根据流程图预测数字序列的生成,而第二题则可能涉及循环结构,考生需要理解循环次数和条件判断。 2. 俱乐部20周年庆祝活动的入场券问题:此题涉及到条件判断和计数。如果修改条件为`...

    SQL常用测试题。。。。。

    在SQL中,可以使用`LEN()`函数获取字符串长度,然后减去`REPLACE()`函数替换特定字符后的长度来得到特定字符的数量。例如,`LEN('A,B,C,,D,E,FG') - LEN(REPLACE('A,B,C,,D,E,FG', ',', ''))`将给出逗号的个数。 2....

    SQL实验1数据库的创建

    通过本实验,我了解到了 SQL Server 2005 的基本操作,对数据库有了一定的认识,数据库原理的一些基本知识得到了巩固和提升,创建数据库、分离数据库、数据库文件备份、附加数据库和删除数据库等操作都得到了实践和...

    sql server 生日提醒

    - `DateDiff("yyyy", '1990-04-10', {fn NOW()})` 计算出当前日期与该用户第一次出生日期之间的年数,假设结果为33年。 - `dateadd("yyyy", 33, '1990-04-10')` 得到今年的生日日期为2023年4月10日。 - `DateDiff("d...

Global site tag (gtag.js) - Google Analytics