飘飘悠悠 发表于 2015-1-16 22:38:07

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命令。

活着的死人 发表于 2015-1-19 19:50:29

having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。

仓酷云 发表于 2015-1-25 18:09:19

是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。

深爱那片海 发表于 2015-2-3 12:39:50

理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识

若相依 发表于 2015-2-9 00:46:12

代替了原来VB式的错误判断。比Oracle高级不少。

精灵巫婆 发表于 2015-3-8 15:51:11

需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。

第二个灵魂 发表于 2015-3-16 03:49:49

财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..

透明 发表于 2015-3-22 19:40:50

大侠们有推荐的书籍和学习方法写下吧。
页: [1]
查看完整版本: MSSQL网站制作之天生表中的数据的剧本。