如何同时对多个表或列操作
时间:2007-12-23 来源:不详 作者:迈克DB
CREATEPROCEDURESP_execSQLonDB
(@TABLENAMEVARCHAR(50),--表名条件
@COLUMNNAMEVARCHAR(50),--字段条件
@SQLNVARCHAR(4000),--执行的SQL
@INCLUDE_NTICHAR(1)=’N’)--是否包含Text,NText,Image数据类型
AS
BEGIN
--VariableDeclaration
--变量定义
DECLARE@strSQLNVARCHAR(4000)
DECLARE@SQL2NVARCHAR(4000)
DECLARE@sTableNameVARCHAR(200)
DECLARE@sColumnNameVARCHAR(200)
DECLARE@SQLTempNVARCHAR(4000)
--CheckwhethertoincludeTEXT,NTEXT,IMAGEdatatypes
--检查是否需要包含Text,NText,Image数据类型
SET@INCLUDE_NTI=UPPER(LTRIM(RTRIM(@INCLUDE_NTI)))
IF@INCLUDE_NTINOTIN(’N’,’Y’)
SET@INCLUDE_NTI=’N’
--ConstructacursortogetthelistofTable/ColumnNamesaccordingtothe@TABLENAMEand@COLUMNNAMEparameters.
--创建一个游标来读取表名和列名的列表,这里列表由参数@TABLENAME和@COLUMNNAME决定
SET@strSQL=N’DECLARETabColCursorCURSORFORSELECTRTRIM(LTRIM(SU.name)) ’’.’’ LTRIM(RTRIM(SO.name)),SC.nameFROMsysobjectsSOINNERJOINsyscolumnsSCONSO.id=SC.idINNERJOINsysusersSUONSO.uid=SU.uidWHERESO.xtype=’’U’’’ 内容来自dedecms
--FilteroutText/NText/Imagedatatypesifitisnotincluded
--假如不包含Text/NText/Image数据类型,把他们过滤掉
IF@INCLUDE_NTI=’N’
--InSysColumnssytemtableXTYPEcolumncorrespondstoColumnDataType
SET@strSQL=@strSQL ’ANDSC.xtypeNOTIN(35,99,34)’
--AddtheTABLE(S)namei.e.filterifitissupplied
--假如有提供表名参数,把它写入过滤条件中
IF@TABLENAMEISNOTNULLANDltrim(rtrim(@TABLENAME))<>’’
BEGIN
SET@TABLENAME=REPLACE(@TABLENAME,’,’,’,’)
SET@strSQL=@strSQL ’AND(SO.nameLIKE’’’ REPLACE(@TABLENAME,’,’,’’’ORSO.nameLIKE’’’) ’’’)’
SET@SQLTemp=’AND(SO.nameLIKE’’’ REPLACE(@TABLENAME,’,’,’’’ORSO.nameLIKE’’’) ’’’)’
END
--AddtheCOLUMN(S)namei.e.filterifitissupplied
--假如有提供列名参数,把它写入过滤条件中
IF@COLUMNNAMEISNOTNULLANDltrim(rtrim(@COLUMNNAME))<>’’
BEGIN
SET@COLUMNNAME=REPLACE(@COLUMNNAME,’,’,’,’)
SET@strSQL=@strSQL ’AND(SC.nameLIKE’’’ REPLACE(@COLUMNNAME,’,’,’’’ORSC.nameLIKE’’’) ’’’)’ dedecms.com
END
--Executetheconstructed"CursorDeclaration"string
--执行定义游标的SQL语句
EXECUTEsp_executesql@strSQL
IF@@ERROR>0
BEGIN
PRINT’ErrorwhiledeclaringtheCursor.PleasecheckouttheparameterssuppliedtotheProcedure’
RETURN-1
END
--DatabaseTransaction.
--标记一个显式本地事务的起始点
BEGINTRANSACTIONgDatabaseTrans
--Openthecursor
--打开游标
OPENTabColCursor
--FetchteTable,Columnnamestovariables
--用游标取出标名、列名对应到参数
FETCHNEXTFROMTabColCursor
INTO@sTableName,@sColumnName
织梦内容管理系统
上一篇:让数据库产生一张详细的日历表 下一篇:用T-SQL导入文件数据到SQLServer
文章评论
共有位Admini5网友发表了评论 查看完整内容