仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 849|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL编程:怎样监督 SQL Server 2000 堵塞

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:22:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因此我们的保存数据方法就是:在删除的动作开始之前,把表数据备份起来,然后留一个空表,在空表上执行“删除”操作。server提要
本文是以下Microsoft常识库文章的MicrosoftSQLServer2000版的更新,它合用于MicrosoftSQLServer7.0:
251004(http://support.microsoft.com/kb/251004/)怎样监督SQLServer7.0堵塞
本文供应可用于诊断堵塞和功能成绩的存储历程的用法和计划。有关怎样懂得息争决堵塞成绩的申明,请参阅以下Microsoft常识库文章:
224453(http://support.microsoft.com/kb/224453/)懂得息争决SQLServer7.0或2000堵塞成绩

更多信息
对sp_blocker_pss80存储历程的以下形貌可捕捉此信息:•入手下手工夫(视运转SQLServer的盘算机而定),以便此堵塞采样在工夫上能够与其他功能信息(如WindowsNT功能监督器日记或SQL事务探查器日记)分歧。
•有关与SQLServer的毗连的信息,经由过程查询sysprocesses体系表猎取。
•有关锁定资本的信息,经由过程查询syslockinfo体系表猎取。
•有关资本守候的信息,经由过程运转DBCCSQLPERF(WAITSTATS)猎取。
•用于毗连(被其他毗连堵塞大概堵塞其他毗连)确当前正在运转的SQLServer批处置,经由过程运转DBCCINPUTBUFFER语句猎取。
•停止工夫,视运转SQLServer的盘算机而定。
创立该存储历程时利用了以下优化,从而下降了运转该存储历程对功能和堵塞的影响:•除非最少有一个毗连在守候资本,不然不天生输入。
•间接查询master数据库中的sysprocesses和syslockinfo体系表,以进步功能并避免该存储历程被堵塞。因而,该存储历程是特定于MicrosoftSQLServer2000的。
•利用光标创立一个小事情表来猎取DBCCINPUTBUFFER输入,这对在tempdb数据库中的利用应没有太年夜影响。
•因为搜集信息时堵塞能够变动,因而存在一种疾速形式,该形式可将所失掉的了局降至sysprocesses和syslockinfo体系表的相干行,从而进步了功能。
•假如您试图跟踪非锁定资本守候,则存在一种锁存形式,该形式可招致锁定输入被疏忽。
该存储历程从任何查询工具运转,都非常有效。可是,Microsoft倡议您依照以下步骤来实行堵塞剖析:1.当利用对企图要监督的SQLServer服务器或SQLServer实例具有sysadmin特权的登录信息举行毗连时,从任何查询工具创立存储历程sp_blocker_pss80(在本文开端供应)。
2.创立一个包括以下查询的剧本文件以轮回运转该存储历程。请注重,提早应在5秒和60秒之间:WHILE1=1
BEGIN
EXECmaster.dbo.sp_blocker_pss80
--Orforfastmode
--EXECmaster.dbo.sp_blocker_pss80@fast=1
--Orforlatchmode
--EXECmaster.dbo.sp_blocker_pss80@latch=1
WAITFORDELAY00:00:15
END
GO

3.该输入在与MicrosoftWindowsNT功能监督器日记和SQL事务探查器日记分离时十分有效,因而倡议同时创立这两种日记。有关要捕捉哪些事务探查器和功能监督器事务的信息,和有关怎样注释了局的信息,请参阅上面的Microsoft常识库文章:
224453(http://support.microsoft.com/kb/224453/)懂得息争决SQLServer7.0或2000堵塞成绩
4.在运转SQLServer的盘算机(您要对其举行监督以避免收集成绩招致查询工具断开毗连)上,在Windows命令提醒符处从Isql.exe或Osql.exe查询工具运转在第2步创立的剧本文件。上面是可用于启动Osql.exe的示例命令行,它假定客户端从运转SQLServer的盘算机运转,而且剧本文件名为Checkblk.sql。请务必改正-S参数,并将“server”交换为SQLServer服务器的称号(或“servernameinstance”,假如您监督的是已定名实例)。别的,还必需改正-i参数,并将“checkblk.sql”交换为在第2步中创立的剧本文件的路径和称号。osql-E-Sserver-icheckblk.sql-ocheckblk.out-w2000
请注重,因为以下缘故原由,您必需利用其他命令行开关:
•为了避免输入文件中呈现换行(换行可以使输入文件更容易于浏览)。
•为了将输入发送到利用-o参数指定的文件,而不是发送到屏幕,以便在查询工具呈现成绩时,在查询工具失利之前仍失掉输入。

上面是用于创立sp_blocker_pss80存储历程的剧本:/*
Note:Thisscriptismeanttohave2creationsofthesamestoredprocedureandoneofthemwillfail
witheither207errorsora2714error.
*/
usemaster
GO
ifexists(select*fromsysobjectswhereid=object_id(dbo.sp_blocker_pss80)andsysstat&0xf=4)
dropproceduredbo.sp_blocker_pss80
GO
createproceduresp_blocker_pss80(@latchint=0,@fastint=1)
as
--version15SP3
setnocounton
declare@spidvarchar(6)
declare@blockedvarchar(6)
declare@timedatetime
declare@time2datetime
declare@dbnamenvarchar(128)
declare@statussql_variant
declare@useraccesssql_variant
set@time=getdate()
declare@probclientstable(spidsmallint,ecidsmallint,blockedsmallint,waittypebinary(2),dbidsmallint,
ignore_apptinyint,primarykey(blocked,spid,ecid))
insert@probclientsselectspid,ecid,blocked,waittype,dbid,
casewhenconvert(varchar(128),hostname)=PSSDIAGthen1else0end
fromsysprocesseswhereblocked!=0orwaittype!=0x0000
ifexists(selectspidfrom@probclientswhereignore_app!=1orwaittype!=0x020B)
begin
set@time2=getdate()
print
print8.2Starttime:+convert(varchar(26),@time,121)++convert(varchar(12),datediff(ms,@time,@time2))
insert@probclientsselectdistinctblocked,0,0,0x0000,0,0from@probclients
whereblockednotin(selectspidfrom@probclients)andblocked!=0
if(@fast=1)
begin
print
printSYSPROCESSES+ISNULL(@@servername,(null))++str(@@microsoftversion)
selectspid,status,blocked,open_tran,waitresource,waittype,
waittime,cmd,lastwaittype,cpu,physical_io,
memusage,last_batch=convert(varchar(26),last_batch,121),
login_time=convert(varchar(26),login_time,121),net_address,
net_library,dbid,ecid,kpid,hostname,hostprocess,
loginame,program_name,nt_domain,nt_username,uid,sid,
sql_handle,stmt_start,stmt_end
frommaster..sysprocesses
whereblocked!=0orwaittype!=0x0000
orspidin(selectblockedfrom@probclientswhereblocked!=0)
orspidin(selectspidfrom@probclientswhereblocked!=0)
printESP+convert(varchar(12),datediff(ms,@time2,getdate()))
print
printSYSPROCFIRSTPASS
selectspid,ecid,waittypefrom@probclientswherewaittype!=0x0000
ifexists(selectblockedfrom@probclientswhereblocked!=0)
begin
printBlockingvialocksat+convert(varchar(26),@time,121)
print
printSPIDsattheheadofblockingchains
selectspidfrom@probclients
whereblocked=0andspidin(selectblockedfrom@probclientswherespid!=0)
if@latch=0
begin
printSYSLOCKINFO
select@time2=getdate()
selectspid=convert(smallint,req_spid),
ecid=convert(smallint,req_ecid),
rsc_dbidAsdbid,
rsc_objidAsObjId,
rsc_indidAsIndId,
Type=casersc_typewhen1thenNUL
when2thenDB
when3thenFIL
when4thenIDX
when5thenTAB
when6thenPAG
when7thenKEY
when8thenEXT
when9thenRID
when10thenAPPend,
Resource=substring(rsc_text,1,16),
Mode=casereq_mode+1when1thenNULL
when2thenSch-S
when3thenSch-M
when4thenS
when5thenU
when6thenX
when7thenIS
when8thenIU
when9thenIX
when10thenSIU
when11thenSIX
when12thenUIX
when13thenBU
when14thenRangeS-S
when15thenRangeS-U
when16thenRangeIn-Null
when17thenRangeIn-S
when18thenRangeIn-U
when19thenRangeIn-X
when20thenRangeX-S
when21thenRangeX-U
when22thenRangeX-Xend,
Status=casereq_statuswhen1thenGRANT
when2thenCNVT
when3thenWAITend,
req_transactionIDAsTransID,req_transactionUOWAsTransUOW
frommaster.dbo.syslockinfos,
@probclientsp
wherep.spid=s.req_spid
printESL+convert(varchar(12),datediff(ms,@time2,getdate()))
end--latchnotset
end
else
printNoblockingvialocksat+convert(varchar(26),@time,121)
print
end--fastset
else
begin--Fastnotset
print
printSYSPROCESSES+ISNULL(@@servername,(null))++str(@@microsoftversion)
selectspid,status,blocked,open_tran,waitresource,waittype,
waittime,cmd,lastwaittype,cpu,physical_io,
memusage,last_batch=convert(varchar(26),last_batch,121),
login_time=convert(varchar(26),login_time,121),net_address,
net_library,dbid,ecid,kpid,hostname,hostprocess,
loginame,program_name,nt_domain,nt_username,uid,sid,
sql_handle,stmt_start,stmt_end
frommaster..sysprocesses
printESP+convert(varchar(12),datediff(ms,@time2,getdate()))
print
printSYSPROCFIRSTPASS
selectspid,ecid,waittypefrom@probclientswherewaittype!=0x0000
ifexists(selectblockedfrom@probclientswhereblocked!=0)
begin
printBlockingvialocksat+convert(varchar(26),@time,121)
print
printSPIDsattheheadofblockingchains
selectspidfrom@probclients
whereblocked=0andspidin(selectblockedfrom@probclientswherespid!=0)
if@latch=0
begin
printSYSLOCKINFO
select@time2=getdate()
selectspid=convert(smallint,req_spid),
ecid=convert(smallint,req_ecid),
rsc_dbidAsdbid,
rsc_objidAsObjId,
rsc_indidAsIndId,
Type=casersc_typewhen1thenNUL
when2thenDB
when3thenFIL
when4thenIDX
when5thenTAB
when6thenPAG
when7thenKEY
when8thenEXT
when9thenRID
when10thenAPPend,
Resource=substring(rsc_text,1,16),
Mode=casereq_mode+1when1thenNULL
when2thenSch-S
when3thenSch-M
when4thenS
when5thenU
when6thenX
when7thenIS
when8thenIU
when9thenIX
when10thenSIU
when11thenSIX
when12thenUIX
when13thenBU
when14thenRangeS-S
when15thenRangeS-U
when16thenRangeIn-Null
when17thenRangeIn-S
when18thenRangeIn-U
when19thenRangeIn-X
when20thenRangeX-S
when21thenRangeX-U
when22thenRangeX-Xend,
Status=casereq_statuswhen1thenGRANT
when2thenCNVT
when3thenWAITend,
req_transactionIDAsTransID,req_transactionUOWAsTransUOW
frommaster.dbo.syslockinfo
printESL+convert(varchar(12),datediff(ms,@time2,getdate()))
end--latchnotset
end
else
printNoblockingvialocksat+convert(varchar(26),@time,121)
print
end--Fastnotset
printDBCCSQLPERF(WAITSTATS)
dbccsqlperf(waitstats)
Print
Print*********************************************************************
PrintPrintoutDBCCInputbufferforallblockedorblockingspids.
Print*********************************************************************
declareibuffercursorfast_forwardfor
selectcast(spidasvarchar(6))asspid,cast(blockedasvarchar(6))asblocked
from@probclients
where(spid@@spid)and
((blocked!=0or(waittype!=0x0000andignore_app=0))
orspidin(selectblockedfrom@probclientswhereblocked!=0))
openibuffer
fetchnextfromibufferinto@spid,@blocked
while(@@fetch_status!=-1)
begin
print
printDBCCINPUTBUFFERFORSPID+@spid
exec(dbccinputbuffer(+@spid+))
fetchnextfromibufferinto@spid,@blocked
end
deallocateibuffer
Print
Print*******************************************************************************
PrintPrintoutDBCCOPENTRANforactivedatabasesforallblockedorblockingspids.
Print*******************************************************************************
declareibuffercursorfast_forwardfor
selectdistinctcast(dbidasvarchar(6))from@probclients
wheredbid!=0
openibuffer
fetchnextfromibufferinto@spid
while(@@fetch_status!=-1)
begin
print
set@dbname=db_name(@spid)
set@status=DATABASEPROPERTYEX(@dbname,Status)
set@useraccess=DATABASEPROPERTYEX(@dbname,UserAccess)
printDBCCOPENTRANFORDBID+@spid+[+@dbname+]
if@Status=NONLINEand@UserAccess!=NSINGLE_USER
dbccopentran(@dbname)
else
printSkipped:Status=+convert(nvarchar(128),@status)
+UserAccess=+convert(nvarchar(128),@useraccess)
print
if@spid=2select@blocked=Y
fetchnextfromibufferinto@spid
end
deallocateibuffer
if@blocked!=Y
begin
print
printDBCCOPENTRANFORDBID2[tempdb]
dbccopentran(tempdb)
end
printEndtime:+convert(varchar(26),getdate(),121)
end--All
else
print8NoWaittypes:+convert(varchar(26),@time,121)+
+convert(varchar(12),datediff(ms,@time,getdate()))++ISNULL(@@servername,(null))
GO
createprocsp_blocker_pss80(@latchint=0,@fastint=1)
as
--version15
setnocounton
declare@spidvarchar(6)
declare@blockedvarchar(6)
declare@timedatetime
declare@time2datetime
declare@dbnamenvarchar(128)
declare@statussql_variant
declare@useraccesssql_variant
set@time=getdate()
declare@probclientstable(spidsmallint,ecidsmallint,blockedsmallint,waittypebinary(2),dbidsmallint,
ignore_apptinyint,primarykey(blocked,spid,ecid))
insert@probclientsselectspid,ecid,blocked,waittype,dbid,
casewhenconvert(varchar(128),hostname)=PSSDIAGthen1else0end
fromsysprocesseswhereblocked!=0orwaittype!=0x0000
ifexists(selectspidfrom@probclientswhereignore_app!=1orwaittype!=0x020B)
begin
set@time2=getdate()
print
print8Starttime:+convert(varchar(26),@time,121)++convert(varchar(12),datediff(ms,@time,@time2))
insert@probclientsselectdistinctblocked,0,0,0x0000,0,0from@probclients
whereblockednotin(selectspidfrom@probclients)andblocked!=0
if(@fast=1)
begin
print
printSYSPROCESSES+ISNULL(@@servername,(null))++str(@@microsoftversion)
selectspid,status,blocked,open_tran,waitresource,waittype,
waittime,cmd,lastwaittype,cpu,physical_io,
memusage,last_batch=convert(varchar(26),last_batch,121),
login_time=convert(varchar(26),login_time,121),net_address,
net_library,dbid,ecid,kpid,hostname,hostprocess,
loginame,program_name,nt_domain,nt_username,uid,sid
frommaster..sysprocesses
whereblocked!=0orwaittype!=0x0000
orspidin(selectblockedfrom@probclientswhereblocked!=0)
orspidin(selectspidfrom@probclientswherewaittype!=0x0000)
printESP+convert(varchar(12),datediff(ms,@time2,getdate()))
print
printSYSPROCFIRSTPASS
selectspid,ecid,waittypefrom@probclientswherewaittype!=0x0000
ifexists(selectblockedfrom@probclientswhereblocked!=0)
begin
printBlockingvialocksat+convert(varchar(26),@time,121)
print
printSPIDsattheheadofblockingchains
selectspidfrom@probclients
whereblocked=0andspidin(selectblockedfrom@probclientswherespid!=0)
if@latch=0
begin
printSYSLOCKINFO
select@time2=getdate()
selectspid=convert(smallint,req_spid),
ecid=convert(smallint,req_ecid),
rsc_dbidAsdbid,
rsc_objidAsObjId,
rsc_indidAsIndId,
Type=casersc_typewhen1thenNUL
when2thenDB
when3thenFIL
when4thenIDX
when5thenTAB
when6thenPAG
when7thenKEY
when8thenEXT
when9thenRID
when10thenAPPend,
Resource=substring(rsc_text,1,16),
Mode=casereq_mode+1when1thenNULL
when2thenSch-S
when3thenSch-M
when4thenS
when5thenU
when6thenX
when7thenIS
when8thenIU
when9thenIX
when10thenSIU
when11thenSIX
when12thenUIX
when13thenBU
when14thenRangeS-S
when15thenRangeS-U
when16thenRangeIn-Null
when17thenRangeIn-S
when18thenRangeIn-U
when19thenRangeIn-X
when20thenRangeX-S
when21thenRangeX-U
when22thenRangeX-Xend,
Status=casereq_statuswhen1thenGRANT
when2thenCNVT
when3thenWAITend,
req_transactionIDAsTransID,req_transactionUOWAsTransUOW
frommaster.dbo.syslockinfos,
@probclientsp
wherep.spid=s.req_spid
printESL+convert(varchar(12),datediff(ms,@time2,getdate()))
end--latchnotset
end
else
printNoblockingvialocksat+convert(varchar(26),@time,121)
print
end--fastset
else
begin--Fastnotset
print
printSYSPROCESSES+ISNULL(@@servername,(null))++str(@@microsoftversion)
selectspid,status,blocked,open_tran,waitresource,waittype,
waittime,cmd,lastwaittype,cpu,physical_io,
memusage,last_batch=convert(varchar(26),last_batch,121),
login_time=convert(varchar(26),login_time,121),net_address,
net_library,dbid,ecid,kpid,hostname,hostprocess,
loginame,program_name,nt_domain,nt_username,uid,sid
frommaster..sysprocesses
printESP+convert(varchar(12),datediff(ms,@time2,getdate()))
print
printSYSPROCFIRSTPASS
selectspid,ecid,waittypefrom@probclientswherewaittype!=0x0000
ifexists(selectblockedfrom@probclientswhereblocked!=0)
begin
printBlockingvialocksat+convert(varchar(26),@time,121)
print
printSPIDsattheheadofblockingchains
selectspidfrom@probclients
whereblocked=0andspidin(selectblockedfrom@probclientswherespid!=0)
if@latch=0
begin
printSYSLOCKINFO
select@time2=getdate()
selectspid=convert(smallint,req_spid),
ecid=convert(smallint,req_ecid),
rsc_dbidAsdbid,
rsc_objidAsObjId,
rsc_indidAsIndId,
Type=casersc_typewhen1thenNUL
when2thenDB
when3thenFIL
when4thenIDX
when5thenTAB
when6thenPAG
when7thenKEY
when8thenEXT
when9thenRID
when10thenAPPend,
Resource=substring(rsc_text,1,16),
Mode=casereq_mode+1when1thenNULL
when2thenSch-S
when3thenSch-M
when4thenS
when5thenU
when6thenX
when7thenIS
when8thenIU
when9thenIX
when10thenSIU
when11thenSIX
when12thenUIX
when13thenBU
when14thenRangeS-S
when15thenRangeS-U
when16thenRangeIn-Null
when17thenRangeIn-S
when18thenRangeIn-U
when19thenRangeIn-X
when20thenRangeX-S
when21thenRangeX-U
when22thenRangeX-Xend,
Status=casereq_statuswhen1thenGRANT
when2thenCNVT
when3thenWAITend,
req_transactionIDAsTransID,req_transactionUOWAsTransUOW
frommaster.dbo.syslockinfo
printESL+convert(varchar(12),datediff(ms,@time2,getdate()))
end--latchnotset
end
else
printNoblockingvialocksat+convert(varchar(26),@time,121)
print
end--Fastnotset
printDBCCSQLPERF(WAITSTATS)
dbccsqlperf(waitstats)
Print
Print*********************************************************************
PrintPrintoutDBCCInputbufferforallblockedorblockingspids.
Print*********************************************************************
declareibuffercursorfast_forwardfor
selectcast(spidasvarchar(6))asspid,cast(blockedasvarchar(6))asblocked
from@probclients
where(spid@@spid)and
((blocked!=0or(waittype!=0x0000andignore_app=0))
orspidin(selectblockedfrom@probclientswhereblocked!=0))
openibuffer
fetchnextfromibufferinto@spid,@blocked
while(@@fetch_status!=-1)
begin
print
printDBCCINPUTBUFFERFORSPID+@spid
exec(dbccinputbuffer(+@spid+))
fetchnextfromibufferinto@spid,@blocked
end
deallocateibuffer
Print
Print*******************************************************************************
PrintPrintoutDBCCOPENTRANforactivedatabasesforallblockedorblockingspids.
Print*******************************************************************************
declareibuffercursorfast_forwardfor
selectdistinctcast(dbidasvarchar(6))from@probclients
wheredbid!=0
openibuffer
fetchnextfromibufferinto@spid
while(@@fetch_status!=-1)
begin
print
set@dbname=db_name(@spid)
set@status=DATABASEPROPERTYEX(@dbname,Status)
set@useraccess=DATABASEPROPERTYEX(@dbname,UserAccess)
printDBCCOPENTRANFORDBID+@spid+[+@dbname+]
if@Status=NONLINEand@UserAccess!=NSINGLE_USER
dbccopentran(@dbname)
else
printSkipped:Status=+convert(nvarchar(128),@status)
+UserAccess=+convert(nvarchar(128),@useraccess)
print
if@spid=2select@blocked=Y
fetchnextfromibufferinto@spid
end
deallocateibuffer
if@blocked!=Y
begin
print
printDBCCOPENTRANFORDBID2[tempdb]
dbccopentran(tempdb)
end
printEndtime:+convert(varchar(26),getdate(),121)
end--All
else
print8NoWaittypes:+convert(varchar(26),@time,121)+
+convert(varchar(12),datediff(ms,@time,getdate()))++ISNULL(@@servername,(null))
GO

--------------------------------------------------------------------------------
这篇文章中的信息合用于:
•MicrosoftSQLServer2000DesktopEngine(Windows)
•MicrosoftSQLServer2000DeveloperEdition
•MicrosoftSQLServer2000EnterpriseEdition
•MicrosoftSQLServer2000EnterpriseEdition
•MicrosoftSQLServer2000PersonalEditionServicePack3
•MicrosoftSQLServer2000尺度版
回到顶端
关头字:kbinfoKB271509
<P>Microsoft和/或其各供给商关于为任何目标而在本服务器上公布的文件及有关图形所含信息的合用性,不作任何声明。一切该等文件及有关图形均"依样"供应,而不带任何性子的包管。Microsoft和/或其各供给商特此声明,对一切与该等信息有关的包管和前提不负任如果某个数据列里包含许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含的净是些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。
谁可相欹 该用户已被删除
沙发
发表于 2015-1-19 09:34:04 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
海妖 该用户已被删除
板凳
发表于 2015-1-26 20:28:35 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
不帅 该用户已被删除
地板
发表于 2015-2-4 20:51:17 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
小魔女 该用户已被删除
5#
发表于 2015-2-10 09:31:16 | 只看该作者
可以动态传入参数,省却了动态SQL的拼写。
若天明 该用户已被删除
6#
发表于 2015-3-1 07:54:11 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
若相依 该用户已被删除
7#
发表于 2015-3-10 13:10:55 | 只看该作者
需要注意的一点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚集索引时,分区表会自动变为非分区表。这一点很让我纳闷。
小妖女 该用户已被删除
8#
发表于 2015-3-17 08:09:34 | 只看该作者
varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。
再现理想 该用户已被删除
9#
发表于 2015-3-24 03:52:59 | 只看该作者
一个是把SQL语句写到客户端,可以使用DataSet进行加工;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表