1,select参数中如果含有单引号怎么办?
<ext:SearchPattern Name="PaperSchemeName" ReplaceQuote="true" Pattern="{0}" />
ReplaceQuote="true" 表示不要将单引号替换成双单引号 (该办法只适用用品高BingoWeb框架扩展的数据源控件)。
2.视图上可以建立触发器吗?
可以建立,但是必须是instead of
create trigger tr_g4
on dbo.test23
instead of insert
as
begin
print 'fuck'
end
3,在触发器里面,Column_updated() 函数会返回一个位模式的varbinary的数据类型来标示那些更新的列,如果对应的列上是1就说明被更新了。(一般很少用到这种用法)
4,在触发器中可以调用 inserted 和 deleted 映像表,里面存储着被插入和删除的数据。
5,触发器最多可以递归调用32层 Trigger_NestLevel()
6,如何让某个列或者某些列组合成为必须唯一,做check约束?
示例:
create table checkTable
(
_ID int identity(1,1),
_Name varchar(20) not null,
_lastName varchar(20) NOT NULL
)
alter table checkTable
add constraint zzb_1 unique(_Name,_lastName)
SELECT * FROM checkTable
INSERT checkTable VALUES('zzb','hello')
INSERT checkTable VALUES('zzb','hello')
如果要联合多个键值必须唯一但是又不方便把他们设置成主键,那么可以用add constraint zzb_1 unique(_Name,_lastName)
7,视图可以可以更新:
如下几种情况:1,单表的查询,如果有join表,那么只update 或者insert join的其中一个表。 2,包含group by 的视图是不可以更新的。
8,视图的性能问题。
视图不是预编译的,也就是说,你调用的时候,视图的执行步骤如下:
1,首先会根据 视图的sql语句将sql语句和里面的视图(如果嵌套了视图)拼装成一个完整的sql语句。
2,解析这个sql语句,如果表名没有制定所有者,比如家dbo.table 等,这个时候,sql做出决定去引用那张表,因为有可能张三
建了一个表叫 table1 李四也建立了一张表叫table1, 如果你写视图的时候,没有告诉sql你具体是引用那张表的话系统就默认
是当前用户的那张表,其次才是 dbo 的引用。
3,进行安全性处理和检查,看当前这个视图的用户是否有权限访问视图中引用的表。,如果权限检查不通过,会抛出错误。
4,执行合并 返回结果。
一般来说,同样的查询,视图要比存储过程要慢一点点。
9,疑问:为什么 视图中不使用top 就不能用order by 语句呢?
10,一般如果视图中这样写,select table1.Name from table1 但是 如果一旦table1 的表结构改变,比如不叫name了,这个时候,调用视图就会出错,
sql有一种视图保护机制,可以用视图将表结构锁住,不让修改。
这样写: select * from table1 with SCHEMABINDING
11,set nocount off / on
当set nocount off时候,会阻止sqlserver放回执行成功的结果数目
就是上面的这样的信息,如果 set nocount on 的话,那么执行结果是这样的
他只显示命令成功完成而已。
对于我们写存储过程的时候,如果设置为off 的时候,可以显著的提高性能。因为这样可以减少网络流量。
12,@@rowcount 用法
可以返回当前进程用户的最后一次执行语句返回的结果数目,(注:set nocount on并不会影响@@rowcount的结果)。
比如 select * from table1 where 1 = 2 这个时候,@@rowcount = 0
select * from table1 where 1 = 1 这个时候,@@rowcount = 1
注:@@rowcount @@errorcount 等这些系统全局变量是用户级别的