利用Sql Server Management Studio 创建视图的问题

如果你初识MySql的话,那么这些语法糖你有必要知道。

我在用 Sql Server 2005 的 Sql Server Management Studio
创建视图的时候似乎有如下问题,我是用它创建Sql Server
2000下的数据库的视图:

Mysql那些事儿之(十一)触发器二

1.Sql创建数据库

在视图中利用 SELECT * FROM SomeTable
创建一个视图,然后对SomeTable增加了一个字段,然后再SELECT这个视图的时候,这个字段并没有显示出来,除非重新运行一下创建视图的脚本。用
sp_HelpText看视图代码,里面还是 * ,估计是因为内部把 *
展开成所有字段了。

 

-- 如果存在数据库order,则删除。否则创建数据库
drop database if exists `order`;
-- 创建数据库
create database `order`;

如果是创建Sql Server 2005 的数据库的视图时,如果使用 *
,在创建成功之后,好像它也会把 *
展开成所有字段,只是你可以在再次打开视图源码时看到被展开的字段,我印象中记得是这样。

相关链接:

2.Sql创建数据表

把 * 展开成所有字段虽然或许效率上能有所提高,但是如果不是为了得到 *
的好处(随时随地可以得到一个表的所有字段,不管这个表怎么改过),我也不会用
* 。

Mysql那些事儿之(一)mysql的安装

CREATE TABLE `Users` (
  `ID` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '客户id',
  `Member` varchar(20) DEFAULT NULL COMMENT '会员号',
  `Name` varchar(100) DEFAULT NULL COMMENT '姓名',
  `Phone` varchar(20) DEFAULT NULL COMMENT '手机号码',
  `QQ` varchar(20) DEFAULT NULL COMMENT 'QQ',
  `PassWord` varchar(50) DEFAULT NULL COMMENT '密码',
  `IsOpen` char(2) DEFAULT 'Y' COMMENT '是否禁用',
  `Createtime` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;
我这里创建了一个Users表,如果你的MySql里面存在多个数据库的话你可以使用 关键词 Use 来告诉mysql你所创建的表属于哪一个库,我这里创建到了上面新建的Order库里面,如果你有mysql或者SQLserver的基础的话
你会觉得这些都很简单,确实如此,主键,默认值,是否为空,是否自增等等,你都了解,不过还是有两个东西值的说一下,一个是没个字段的备注,我个人开发过程中觉得这个非常重要,所以一个简单的备注能让你快速的回忆起
这个字段的作用,COMMENT 就是专门做这个的。第二个是我创建表中的1000这个值,这个是该表的记录会从1000开始,可以自己去定义。uft8设置编码格式。

不知道这个问题怎么解决……

3.创建存储过程

创建视图的时候还是用查询分析器吧,呵呵

Mysql那些事儿之(二)有关数据库的操作

DELIMITER $$
CREATE DEFINER=`root`@`%` PROCEDURE `RecordPage`(
    tblName varchar(2000),
    SelectFieldName varchar(4000),
    strWhere varchar(4000),
    OrderField varchar(2000),
    PageSize int,
    PageIndex int,
    out iRowCount int  ,            -- 总记录数
    out pagecount int               -- 总分页数
)
$$:begin
     declare v_sqlcounts varchar(4000);
     declare v_sqlselect varchar(4000);
     #拼接查询总记录的SQL语句
     set strWhere=concat(' where ', strWhere);
     set OrderField=concat(' order by ', OrderField);

    #拼接分页查询记录的动态SQL语句
    set v_sqlselect = concat('select ',SelectFieldName,' from ',tblName,strWhere,if(OrderField is not null,OrderField,''),' limit ',(PageIndex-1)*PageSize,' , ',PageSize);
   #select v_sqlselect;leave $$;
   set @sqlselect = v_sqlselect;

   prepare stmtselect from @sqlselect;
        execute stmtselect;
   deallocate prepare stmtselect;

       -- set v_sqlcounts = concat('select count(*) into @recordcount from ',tblName,strWhere);
     set v_sqlcounts = concat('select SQL_CALC_FOUND_ROWS ',SelectFieldName,'  from ',tblName,strWhere);
    #select v_sqlcounts;leave $$;
    set @sqlcounts = v_sqlcounts;
    prepare stmt from @sqlcounts;
         execute stmt;
    deallocate prepare stmt;
    #获取动态SQL语句返回值
    -- set iRowCount = @recordcount;
     set iRowCount = (select FOUND_ROWS());

end $$$$
DELIMITER ;

创建存储过程的格式,上面是我创建的一个通用分页的存储过程,亲测,可用,只需要对应传参数就行了

4.关于批量更新和插入数据到mysql

Mysql那些事儿之(三)有关数据表的操作

-- 批量插入
INSERT INTO `order`.`users`(`ID`,`Member`,`Name`,`Phone`,`QQ`,`PassWord`,`IsOpen`,`Createtime`)
VALUES(),(),(),(),(),(),()......;

--批量更新
UPDATE `order`.`users`
SET Name= case ID
    WHEN 1 THEN '111'
    WHEN 2 THEN '222'
    WHEN 3 THEN '333' 
    END
WHERE `ID` in(1,2,3) ;

更新多个字段的时候可以将SET与END之间的部分复制替换成要更新的字段信息

 

Mysql那些事儿之(四)数据表数据查询操作

Mysql那些事儿之(五)操作时间

;

Mysql那些事儿之(六)字符串模式匹配

;

Mysql那些事儿之(七)深入select查询

;

Mysql那些事儿之(八)索引

Mysql那些事儿之(九)常用的函数

Mysql那些事儿之(十)触发器一

 

比较after insert、before insert、after update、before
update触发时间与事件 的触发情况。

   www.2cto.com  

Sql代码  

–创建表  

create table film_text(  

id smallint auto_increment,  

name varchar(40),  

txt text,  

primary key(id)  

);  

  

对于film表在 触发器 一 里有提过,代码就不写了。

针对表film 创建before insert 触发器:

 

Sql代码  

–创建before insert 触发器  

create trigger trigger_film_bef  –触发器名称为trigger_film_bef