--定义存储过程.
Create PROCEDURE Usp_Static
@tableName nvarchar(50),
@groupCol nvarchar(50), --分组字段.
@staticCol nvarchar(50), --统计字段.
@showCol nvarchar(50), --表头字段.
@opera nvarchar(50) --聚会函数.
AS
declare @SQL nvarchar(max), @proColumn nvarchar(50) --存储游标执行的列.
execute ('Declare curCol Cursor for select distinct '+@showCol+' from '+@tableName+' for read only') --游标.
一,对于含有 "表名","字段"等的拼接,则需要通过字符串直接拼接(SQL中只支持单引号,表示字符串常量):
表字段有:FOrderNum(订单号),FGoodName(商品名),FOrderQuantity(数量),FCustomerName(用户名).
 
需求表达式:
selectFOrderNum, sum(FOrderQuantity)as[汇总].
写入表达式:
@SQL='select '+@groupCol+','+@opera+'('+@staticCol+') as [汇总]'
 
二,对于含有指定字符串常量(该常量是动态传递过来的).则需要"分割后再连接":
需求表达式:(电风扇是游标curCol获得的商品名)
1)列出需求,when'电风扇'then fileName elsenullEndas[电风扇]
2)字符转义,'when ''电风扇'' then fileName else null End as [电风扇]'
因为"商品名是动态传递过来的,所以进行分割:
'when ''|电风扇|'' then |fieldName| else null end) as [|电风扇|]'
第一个分割位置的前面是半截字符串,你当然得补上一个单引号了,后面是一个字符串变量,就直接+了
2)合并:
' when '''+@proColumn+''' then '+@staticCol+' else null End) as '+@proColumn
--其中,when后面的第一个单引号转义第二个单引号,第三个单引号为补充半截字符串.
 
案例二,根据字段名和对应的值查询.
(正确代码):目前发现,需要"分组,排序"等才能解决,如"order by","group by"等.
ALTER PROCEDURE USP_QueryT_AddressBookByField
@FieldName nvarchar(20), --字段名.
@FieldVal nvarchar(50) --字段对应的值.
AS
SET NOCOUNT ON
declare @query nvarchar(max)
set @query = 'select [FId] as [编号],[FName] as [姓名],[FSex] as [性别],[FPhone] as [电话号码],[Fqq] as [QQ],
[FWordPhone] as [国际电话号码],[FEMail] as [EMail],[FHandSet] as [手机号] from
[T_AddressBook] where '+@FieldName+'='''+@FieldVal+''' order by [FId]'
exec(@query)

SQL存储过程基于字段名传入的字符串拼接.的更多相关文章

  1. WMSYS.WM_CONCAT(distinct(字段名)) 函数,字符串拼接函数。合并列

    合并列函数 WMSYS.WM_CONCAT(distinct(字段名)) 函数 可以实现字符串拼接在一起,这种情况可以在要求把一个字段的多个值拼接在一起的时候使用.其中distinct可以去掉重复的值 ...

  2. Oracle中使用游标获取指定数据表的所有字段名对应的字符串

    操作步骤:打开PLSQL Developer后,直接执行下面的语句就可以出来 --Oracle中使用游标获取指定数据表的所有字段名对应的字符串 declare mytablename VARCHAR( ...

  3. sql通过某个字段名找到数据库中对应的表

    sql通过某个字段名找到数据库中对应的表 SELECT sb.name FROM syscolumns s JOIN sysobjects sb ON s.id=sb.id WHERE s.name= ...

  4. sql server数据库字段名要注意不能叫file

    sql server数据库字段名要注意不能叫file 如java 中  private string  file,这是sql 的关键字

  5. PL/SQL查询,字段名添加中文别名,查询结果的字段名会显示问号,处理方法:

    一开始查询出来的字段名显示的是???,下面说说解决方法(本人也是在网上看到的,算是重复编辑一下): -------------------------------------------------- ...

  6. 使用 SQL的 for xml path来进行字符串拼接

    本篇主要讲怎么利用SQL的FOR XML PATH 参数来进行字符串拼接,FOR XML PATH的用法很简单,它会以xml文件的形式来返回数据. 我的讲解步骤: 1:构造初始数据 2:提出问题 3: ...

  7. 去掉PowerDesigner生成SQL脚本中字段名带的引号

    使用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号.其实加引号是PL/SQL的规范,数据库会严格按照“”中的名称建表,如果没有“”,会按照ORACL ...

  8. sql去除某个字段中的某个字符串 replace

    update A set col1 =REPLACE ( col1 ,'测试' , '') where col1 like '%测试%' 在使用过程中如果遇到text类型的字段时会报 参数数据类型 t ...

  9. winform程序_根据输入的sql生成excel(字段名与sql一致)

    自己打开看吧 app.config可配置数据库路径 excel保存路径.... 源码下载链接: http://pan.baidu.com/s/1bnHPhdd

随机推荐

  1. Warm up

    hdu4612:http://acm.hdu.edu.cn/showproblem.php?pid=4612 题意:给你一个无向连通图,问加上一条边后得到的图的最少的割边数; 题解:首先对原图求割边数 ...

  2. quartz定时任务时间配置

    quartz定时任务时间设置描述(2011-03-03 16:23:50)转载▼标签: quartz时间it 分类: 凌乱小记  这些星号由左到右按顺序代表 :     *    *     *    ...

  3. Android仿微信SlideView聊天列表滑动删除效果

    package com.ryg.slideview; import com.ryg.slideview.MainActivity.MessageItem; //Download by http://w ...

  4. 全表扫描出现db file sequential read

    SESSION 1执行 SQL> update test1 set id=1000; SESSION 2 : select * from test1 如果表上面有大量的行迁链接,会是单块读等待事 ...

  5. PL/SQL 程序块

    DECLARE BARCODE VARCHAR(50); BEGIN BARCODE := 'A'; IF BARCODE<>'A' then SELECT 1 FROM sam_user ...

  6. Node.js权威指南 (9) - 进程与子进程

    9.1 Node.js中的进程 / 225 9.1.1 进程对象的属性 / 225 9.1.2 进程对象的方法与事件 / 2279.2 创建多进程应用程序 / 235 9.2.1 使用spawn方法开 ...

  7. Linux学习笔记29——IPC状态命令

    一 IPC IPC是进程间通讯,在前面,我们相继学习了进程间通讯机制有信号量,内存共享,消息队列.状态命令(ipcs)和删除命令(ipcrm)提供了一种检查和清理IPC机制的方法. 二 状态命令 1 ...

  8. PHP_SELF、 SCRIPT_NAME、 REQUEST_URI 区别

    $_SERVER[PHP_SELF], $_SERVER[SCRIPT_NAME], $_SERVER['REQUEST_URI'] 在用法上是非常相似的,他们返回的都是与当前正在使用的页面地址有关的 ...

  9. JavaScript 兼容处理IE67之 !"a"[0]

    IE67对字符串进行取值需要使用charAt()方法,不能直接通过数组方式的坐标访问: <!DOCTYPE html> <html> <head> <meta ...

  10. UVa 11825 集合dp

    #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #i ...