-----------全局唯一标识值
create table lintest1215(id uniqueidentifier not null default newid(),name int)
insert into lintest1215(name) select 1
insert into lintest1215(name) select 3
select * from lintest1215
go
drop table lintest1215
SQLServer2000开发者指南
http://www.pdown.net/download.asp?downid=2&id=1035
sqlserver 2000 程序员指南
http://www.pdown.net/download.asp?downid=2&id=143
-------------------------------------------------------------------------------------------------------------
2009-12-09
更新锁:可以防止其他进程读取并放置共享锁于改记录上,直到最早的进程完成改操作。
select * from tablename(updlock)
-----------------------------------------------------------------------------------------------------------
2009-1208
create table tb1209(id int)
insert into lindboption
exec('select 1') --插入数据到表中
也可以在EXEC后面跟存储过程,但是要求存储过程返回的表列与原表对应。
exec [procedurename]
但是有种情况要注意:如果你试图以这种方式来收集来自DBCC命令的结果集,SQL SERVER就会返回一个错误,但是你可以将DBCC语句封装到一个串种,并通过EXEC 来执行它。如:
insert into tablename
exec ('DBCC SQLPERF(LOGSPACE)') --这个语句是查询指定数据库里日志空间使用的百分比
---------------------------------
execute与sp_executesql区别:execute使用时整个批处理每次必须以一个串的形式来汇编。如果使用sp_executesql,则改批处理只会在第一此执行时被汇编,所有随后的执行都可以使用同一个串,并提供一个额外的参数集合。
-----------------------------------------------------------------------------------------------------------
2009-12-05
sp_executesql语句的使用
create table nt(id int,name int)
insert into nt select 1,1
exec sp_executesql @stmt=N'select * from nt where id=@id and name=@name',@parms=N'@id
int,@name int',@id=1,@name=1
--上面例子中如果前面语句使用参数,那么后面的值必须也带参数名。
--或者
exec sp_executesql N'select * from nt where id=@id and name=@name',N'@id int,@name
int',@id=1,@name=1
--上面例子中后面值的参数名可以省略
go
drop table nt
------------
use lin
exec('use test select * from newtable')
select * from newtable
--上面语句会出现错误,不能在其他批处理中使用同一个数据库环境。也不能在其他批处理中使用其他
批处理定义的变量,如下:
declare @a varchar(100)
set @a='a'
exec('select * from @a'),
----------
instead of 触发器是在其他触发器之前执行,并且一个对象只能有一个instead of触发器。
sp_helptrigger 'tablename' 可以列出与表有联系的所有触发器。
禁止触发器 不用删除触发器也可以暂时地禁止和启动触发器。
alter table order disable trigger trigger_name
-----------------------------------------------------------------------------------------------------------
2009-11-26
對象作用域:
alter table lin11241 add name varchar(10) null
select id,name from lin11241
這種情況下會提示name列不存在,有兩種解決方法:1.在alter與select語句之間用go分開,因為一些
DDL語句可以和其他命令存在于同一個批處理中,但必須記住只有批處理完成后才能訪問結果對象。2.將
select語句改成select * from lin11241。
同樣情況,帶有EXEC的這種語句:
alter table lin11241 add name varchar(10) null
select id,name from lin11241 也會出錯。
----------------------------------------------
set ansi_nulls on --当某字段为空时,不能用=null来查询出结果,诺是想可以用=null实现查询,
则可以将on设置为off。
-----------------------------------------------
set nocount on
select datalength('啊啊a')
select len('啊啊a')
select str(1564654.66,8,1)
select replicate('g',5)
select round(3.1,0) --取指定精度的四舍五入值
select floor(3.1) --取得小于或等于该数的最大整数
select ceiling(3.1) --取得大于或等于该数的最小整数
select rand(3) --取得0到1之间的随机数
select power(4.6,3) --指定数的N次幂
select @@servicename
openrowset函數 跟openquery函數相似,區別在於openrowset函數是用來連接一個沒有作為鏈接伺服器
註冊的伺服器。因此開發人員必須聽哦你是提供連接參數和要使用得語句。而openquery函數是從鏈接伺
服器上返回記錄。
----------------------------------------------
存儲過程中最好加上return語句,可以控制語句的返回 。還是就是用於GOTO語句中
-----------------------------------------------------------------------------------------------------------
2009-11-25
isdate()
isnumeric()
datalength()
binary_checksum(parm1,parm2...可以有多个参数) --2进制校验,可以用来比较表各列的检验和是否发生变化
-----------------------------------
sql_variant_property(column,'property')
example:sql_variant_property(name,'basetype')
参数:basetype(基本类型)
precision(精度)
scale(标度)
totalbytes(字节总数)
collation(校对)
MaxLength(最大长度)
nullif(expression1,expression2) 如果两哥表达式一样,返回null,如果不等就返回第一哥表达式的值。因为在统计平均值时值是0是有被考虑进去的,所以有时候为了不考虑进去,用此函数将列转为null,这种情况下可以不考虑原来的0值,因为计算时是不考虑Null的。
-----------------------------------------------------------------------------------------------------------
2009-11-24
@@error的使用:
create table a1(id int primary key,name int)
insert into a1 select 1,1
insert into a1 select 2,1
go
create proc lintest
as
begin
declare @errcode int
insert into a1 select 1,1
set @errcode = @@error
if @errcode <>0 --如何得到此error的值
select @errcode as errcode
end
go
exec lintest
go
drop table a1
drop procedure lintest
/*(1 行受影响)
(1 行受影响)
消息 2627,级别 14,状态 1,过程 lintest,第 5 行
违反了 PRIMARY KEY 约束 'PK__a1__5165187F'。不能在对象 'dbo.a1' 中插入重复键。
语句已终止。
errcode
-----------
2627
(1 行受影响)*/
-----------
備註:只有將query analysies輸出格式改為文本的情況下才能輸出錯誤代碼,否則只有錯誤描述。
-----------
-------------------------------------------------------------------------------
set nocount on
select datalength('啊啊a')
select len('啊啊a')
select str(1564654.66,8,1)
select replicate('g',5)
select round(3.1,0) --取指定精度的四舍五入值
select floor(3.1) --取得小于或等于该数的最大整数
select ceiling(3.1) --取得大于或等于该数的最小整数
select rand(3) --取得0到1之间的随机数
select power(4.6,3) --指定数的N次幂
select @@servicename
openrowset函數 跟openquery函數相似,區別在於openrowset函數是用來連接一個沒有作為鏈接伺服器註冊的伺服器。因此開發人員必須聽哦你是提供連接參數和要使用得語句。而openquery函數是從鏈接伺服器上返回記錄。
2009-11-25
事务处理:
在存储过程种我们经常会用到事务的处理,一个批处理中的执行语句只要一个有出错感觉好像就全部回滚,这种情况下用begin tran与commit tran感觉起不到作用。不知道能否举个简单例子来体现下用处?
函数或者存储过程中不能用不确定函数,比如newid()和getdate()等。
-----------------------------------------------------------------------------------------------------------
2009-11-24
對象作用域:
alter table lin11241 add name varchar(10) null
select id,name from lin11241
這種情況下會提示name列不存在,有兩種解決方法:1.在alter與select語句之間用go分開,因為一些DDL語句可以和其他命令存在于同一個批處理中,但必須記住只有批處理完成后才能訪問結果對象。2.將select語句改成select * from lin11241。
同樣情況,帶有EXEC的這種語句:
alter table lin11241 add name varchar(10) null
select id,name from lin11241 也會出錯。
----------------------------------------------
set ansi_nulls on --当某字段为空时,不能用=null来查询出结果,诺是想可以用=null实现查询,则可以将on设置为off。
-----------------------------------------------
set nocount on
select datalength('啊啊a')
select len('啊啊a')
select str(1564654.66,8,1)
select replicate('g',5)
select round(3.1,0) --取指定精度的四舍五入值
select floor(3.1) --取得小于或等于该数的最大整数
select ceiling(3.1) --取得大于或等于该数的最小整数
select rand(3) --取得0到1之间的随机数
select power(4.6,3) --指定数的N次幂
select @@servicename
openrowset函數 跟openquery函數相似,區別在於openrowset函數是用來連接一個沒有作為鏈接伺服器註冊的伺服器。因此開發人員必須聽哦你是提供連接參數和要使用得語句。而openquery函數是從鏈接伺服器上返回記錄。
----------------------------------------------
存儲過程中最好加上return語句,可以控制語句的返回 。還是就是用於GOTO語句中
-------------------------------------------------------------------------------------------------------------
2009-11-18
create table lin1118(id int identity(3,1),name varchar(100))
insert into lin1118 select 'a1'
insert into lin1118 select 'a2'
select @@identity,ident_seed('lin1118'),ident_incr('lin1118')
go
drop table lin1118
/*(所影响的行数为 1 行)
上面例子分别取得表当前种子的值,种子的初始值,种子的增值。
---------------------
4 3 1
----------------------
*/
--------------------------------------------------------------
select $123456789.90,convert(varchar,$123456789.90,0),convert(varchar,$123456789.90,1),convert(varchar,$123456789.90,2)
/*
--result
------------------------
123456789.9000 123456789.90 123,456,789.90 123456789.9000
---------------------
注释:
convert(varchar,$货币值,参数(0/1/2))
0 代表 保留两位小数,每三位数字之间无逗号
1 代表 保留两位小数,每三位数字之间有逗号
2 代表 保留四位小数,每三位数字之间无逗号
*/
--------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
2009-11-17
delete 不会重置表计数(identity)
truncate 会重置表计数
---------------------------
select coalesce(col1,col2,col3) 此函数返回第一个非空表达式的值
如:select coalesce(20,10,'g') 返回结果为20
binary_checksum(column1,column2,column3...) 查询数列的二进制校验,可以通过此比较该几列是否更新过,对大小写敏感。默认安装系
统时是忽略大小写,所以此函数不能工作。
--------------------------------------------------------------
isdate(expression)
isnumeric(expression)
datalength(expression) --返回字节数
select @count=(*),@begin=1,@char='' from tablename --在这语句中可以实现3个字符串的赋值,以便在循环中可以用到起始数,终止数
,以及变量字符串。
-----------------------------------------------------------------------------------------------------------
2009-11-12
SELECT *, MyUser.MyScalarFunction() --当调用标量用户定义函数时,必须提供至少由两部分组成的名称:
FROM MyTable
可以使用一个部分构成的名称调用表值函数:
SELECT *
FROM MyTableFunction()
然而,当调用返回表的 SQL Server 内置函数时,必须将前缀 :: 添加至函数名:
SELECT * FROM ::fn_helpcollations()
-------------------------------------
近似值与精确值?
--------------------------------------------------------------
---------------------
MSdtc服務:用來管理多個伺服器之間的兩步提交事務,這樣來保證再不同伺服器上更新數據時可以成功的完成。
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------
2009-11-03 存储过程返回值的获取
---------------------
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER proc lin11031
@a1 int
as
select 1
return (3)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
declare @b int
exec @b=lin11031 2
select @b
------------------------------------------------------
1
---------
3
-----------------------------------------------------------------------------------------------------------
2009-11-05
存储过程加密破解
系统存储过程,查询数据库空间使用情况:sp_spaceused
-----------------------------------------------------------------------------------------------------------
2009-11-06
在删除存储过程以前最好是先释放高速缓存的内容,有两种方式:
1. dbcc freeproccache
2.重新启动服务器
-----
exec sp_depends objectname 显示该对象所依赖的对象和依赖此对象的对象
存储过程的最大值(见书3.4章)
删除存储过程所依赖的对象后必须重新执行该语法才可生效。
------
三种存储过程的重新编译方法:
1。exec sp_recompile procname
2. exec procname with recompile 执行的时候重新编译
3. 另外一种是在编码时加入with recompile
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10054891/viewspace-619948/ ,如需转载,请注明出处,否则将追究法律责任。