MSSQL网站制作之天生表中的数据的剧本。
出于效率方面的考虑,InnoDB数据表的数据行级锁定实际发生在它们的索引上,而不是数据表自身上。显然,数据行级锁定机制只有在有关的数据表有一个合适的索引可供锁定的时候才能发挥效力。剧本|数据在A服务器中有表table1,想把该表的内容导到B服务器中,这两个数据库没联网,怎样办?
导成内部文件,再用导进导出。。。。这太笨了吧,假如对方服务器是INTERNET上的,只能实行服本怎样办,晕逝世了吧,用这个存储历程来帮你。
ALTERprocsp_GetTableData
@objnamenvarchar(776)
as
--set@objname=s_coderule
/*declare@novarchar(35),@yesvarchar(35),@nonevarchar(35)
select@no=namefrommaster.dbo.spt_valueswheretype=Bandnumber=0
select@yes=namefrommaster.dbo.spt_valueswheretype=Bandnumber=1
select@none=namefrommaster.dbo.spt_valueswheretype=Bandnumber=2
*/
declare@numtypesnvarchar(80)
select@numtypes=Ntinyint,smallint,decimal,int,real,money,float,numeric,smallmoney,varbinary,bit
declare@chartypesnvarchar(80)
select@chartypes=Nchar,varchar,text,nchar,ntext,nvarchar
declare@datetypesnvarchar(80)
select@datetypes=Ndatetimesmalldatetime
declare@LimitlengthInt,@Limitlength1Int
declare@objidbigint
--declare@sysobj_typechar(2)
select@objid=id
--,@sysobj_type=xtype
fromsysobjectswhereid=object_id(@objname)
set@Limitlength=0
set@limitLength1=0
declare@namevarchar(30),@typevarchar(10),@lengthint,@FieldSQLvarchar(5000),@SQLvarchar(8000),@identsmallint
set@SQL=
set@FieldSQL=
declarecurcursor
for
select
Column_name=name,
Type=type_name(xusertype),
Length=convert(int,length),
Ident=colstat
fromsyscolumnswhereid=@objidandnumber=0orderbycolid
openCur
fetchnextfromcurinto@name,@type,@length,@ident
while@@fetch_status=0
begin
if@Ident=0
begin
if@Limitlength>200
begin
set@sql=@sql+,
set@limitlength=0
end
if@Limitlength1>200
begin
set@Fieldsql=@Fieldsql+char(39)+,+char(39)
set@limitlength1=0
end
Set@FieldSQl=@FieldSQL+LTrim(Rtrim(@name))+,
ifcharindex(@type,@numtypes)>0--(+convert(char(6),@length)+)
set@sql=@SQL++Casewhen+@name+isnullthenNullelseRtrim(Convert(char,+@name+))end
elseifcharindex(@type,@chartypes)>0
set@sql=@SQL++Casewhen+@name+isnullthenNullelse+char(39)+RTrim(+@name+)+char(39)end
elseifcharindex(@type,@datetypes)>0
set@sql=@SQL++Casewhen+@name+isnullthenNullelse+char(39)+RTrim(convert(char(19),+@name+,120))+char(39)end
set@SQL=@SQL+++char(39)+,+char(39)
set@Limitlength=@Limitlength+@Length
set@Limitlength1=@Limitlength1+Len(@Name)
end
fetchnextfromcurinto@name,@type,@length,@ident
end
closecur
deallocatecur
--print@sql
ifright(@FieldSQl,1)=char(39)
SET@FieldSQL=Substring(@FieldSQL,1,len(@FieldSQL)-5)
else
SET@FieldSQL=Substring(@FieldSQL,1,len(@FieldSQL)-1)
ifright(@SQl,1)=,
SET@SQL=Substring(@SQL,1,len(@SQL)-5)
else
SET@SQL=substring(@SQL,1,len(@SQL)-4)
--print(@FieldSQL)
set@FieldSQl=select+char(39)+insertinto+@objname+(+@FieldSQL+)
--set@FieldSQl=select+char(39)+insertinto+@objname+(+@FieldSQL+)
print@FieldSQL
set@Sql=values(+char(39)+@SQL+++char(39)+)+char(39)+from+@objname
print@SQL
set@sql=@fieldsql+@sql
exec(@sql)
--Exec@FieldSQl+@sql
--selectRtrim(isnull(convert(char(8),Did),))froms_send_files
GO
SETQUOTED_IDENTIFIEROFF
GO
SETANSI_NULLSON
GO
看看了局吧,有一些BUG,够用就行,懒得改了。
“数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT、LOCKINSHAREMODE、SELECT、FORUPDATE命令以及INSERT、UPDATE和DELETE命令。 having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。 是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。 理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识 代替了原来VB式的错误判断。比Oracle高级不少。 需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。 财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的.. 大侠们有推荐的书籍和学习方法写下吧。
页:
[1]