存储过程替换text,ntext列中的字符串数据库教程((共10篇))由网友“蒙塔基星星”投稿提供,下面是小编整理过的存储过程替换text,ntext列中的字符串数据库教程,欢迎大家阅读分享借鉴,欢迎大家分享。
篇1:存储过程替换text,ntext列中的字符串数据库教程
存储过程|字符串
/*
author:amjn
date:-03-28
version:1.0
function:替换text,ntext列中的字符串(不支持中文)
*/
declare @ptr varbinary(16)
declare @amjnId int
declare @Position int,@len int
set @len=datalength('ILOVEHJL')
declare wux_Cursor scroll Cursor
for
select textptr([Name]),[amjnId] from USA201
for read only
open wux_Cursor
fetch next from wux_Cursor into @ptr,@amjnId
while @@fetch_status=0
begin
select @Position=patindex('%ILOVEHJL%',[Name]) from USA201 where [amjnId]=@amjnId
while @Position>0
begin
set @Position=@Position-1
updatetext USA201.[Name] @ptr @Position @len 'i love hjl'
select @Position=patindex('%ILOVEHJL%',[Name]) from USA201 where [amjnId]=@amjnId
end
fetch next from wux_Cursor into @ptr,@amjnId
end
close wux_cursor
deallocate wux_cursor
go
篇2:SQL分隔字符串的存储过程数据库教程
存储过程|字符串
我在做一个项目时研究了查询多个关键字的技术,这是其中用到的一个技术,SQL分隔字符串的存储过程数据库教程
。“分隔字符串”存储过程的作用就是把“jiangjs,shenxy,cheng”类的字符串隔开保存到一个表中。 CREATE PROCEDURE [分隔字符串](
@String NVARCHAR(1000), -- 要分隔的字符串
@SPLITCHAR NVARCHAR(10) = ',', -- 分隔字符
@TableName NVARCHAR(50), -- 存入的表名称
@FieldName NVARCHAR(50) = '[ID]' -- 存入的字段名称
)
AS -- 将字符串分隔开放进表中 DECLARE @L INT -- 第一个分隔字符的位置
DECLARE @S INT -- 第二个分隔字符的位置
SET @L = 0
SET @S = CHARINDEX(@SPLITCHAR, @String, @L) WHILE @L <= LEN(@String)
BEGIN
DECLARE @ID NVARCHAR(50) IF @S = 0 SET @S = LEN(@String) + 1 -- 如果到最后一个字符串那么第二个分隔字符的位置就是这个字符串的长度加一
SET @ID = SUBSTRING(@String, @L, @S - @L) -- 取值
SET @L = @S + 1
SET @S = CHARINDEX(@SPLITCHAR, @String, @L) IF LTRIM(RTRIM(@ID)) = '' CONTINUE -- 如果是空字符串就跳过 DECLARE @SQL NVARCHAR(1000)
SET @SQL = 'INSERT INTO ' + @TableName + ' ('+ @FieldName +') VALUES(''' + @ID + ''')'
EXEC sp_executesql @SQL
END
GO ----------NotMSN Messenger : notking@hotmail.com
篇3:管理存储过程数据库教程
12.3.1 查看存储过程
存储过程被创建以后,它的名字存储在系统表sysobjects 中;它的源代码存放在系统表syscomments 中,可以通过MS SQL Server 提供的系统存储过程来查看关于用户创建的存储过程信息。
1通过Enterprise Manager 管理工具同样可以查看存储过程的源代码
其操作如下:
(1) 启动Enterprise Manager, 登录到要使用的服务器。
(2) 选择要创建存储过程的数据库,在左窗格中单击Stored Procedure 文件夹,此时在右窗格中显示该数据库的所有存储过程。
(3) 在右窗格中,右击要查看源代码的存储过程,在弹出的菜单中选择Properties选项,此时便可看到存储过程的源代码。如图12-4 所示:
2 使用sp_helptext 存储过程查看存储过程的源代码
其语法格式如下:
sp_helptext 存储过程名称
例如要查看数据库pubs 是否是存储过程reptq1 的源代码,则执行sp_helptext reptq1。
注意:如果在创建存储过程时使用了WITH ENCRYPTION选项,那么无论是使用Enterprise Manager还是系统存储过程sp_helptext都无法查看到存储过程的源代码。
12.3.2 重新命名存储过程
修改存储过程的名字使用系统存储过程sp_rename。 其命令格式为:
sp_rename 原存储过程名, 新存储过程名
例12-4 :将存储过程reptq1 修改为newproc 其语句为:
sp_rename reptq1, newproc
另外,通过Enterprise Manager 也可修改存储过程的名字,其操作过程与WINDOWS 下修改文件名字的操作类似。即首先选中需修改名字的存储过程,然后右击鼠标,在弹出菜单中选取rename 选项,最后输入新存储过程的名字。
12.3.3 删除存储过程
删除存储过程使用drop 命令,drop 命令可将一个或多个存储过程或者存储过程组从
当前数据库中删除。其语法规则为:
DROP PROCEDURE {procedure}} [,…n]
例12-5: 如将存储过程reptq1 从数据库中删除,则执行:
drop procedure reptq1
12.3.4 执行存储过程
执行已创建的存储过程使用EXECUTE 命令,其语法如下:
[EXECUTE]
{[@return_statur=]
{procedure_name[;number] | @procedure_name_var}
[[@parameter=] {value | @variable [OUTPUT] | [DEFAULT] [,…n]
[WITH RECOMPILE]
各参数的含义如下:
@return_status
是可选的整型变量,用来存储存储过程向调用者返回的值,
@procedure_name_var
是一变量名用来代表存储过程的名字。
其它参数据和保留字的含义与CREATE PROCEDURE 中介绍的一样。
例12-6: 该存储过程被用来将两个字符串连接成一个字符串,并将结果返回。创建存储过程:
12.3.5 修改存储过程
修改以前用CREATE PROCEDURE 命令创建的存储过程,并且不改变权限的授予情况以及不影响任何其它的独立的存储过程或触发器常使用ALTER PROCEDURE 命令。其语法规则是:
ALTER PROC[EDURE] procedure_name [;number]
[ {@parameter data_type } [VARYING] [= default] [OUTPUT]] [,...n]
[WITH
{RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION}]
[FOR REPLICATION]
AS
sql_statement [...n]
其中各参数和保留字的具体含义请参看CREATE PROCEDURE 命令。
下面将举一个例子使读者对该命令有更为深刻的理解。
将该段代码输入到SQL Server Query Analyzer 窗口中运行后结果为:
注意:由于在ALERT PROCEDURE中使用了WITH ENCTYPTION保留字,所以在查看修改后的存储过程源代码时看到是一些代码。
篇4:通用存储过程的编写数据库教程
存储过程
通用存储过程的编写
对数据库的操作基本上就四种:Insert、Update、Delete和Select,而Update和Insert两种操作又可以作简单的合并,这样下来,基本上一个数据表对应三个存储过程便可以完成绝大多数的数据库操作,存储过程命名规则:Operate_TableName。比如表Order_Info对应三个存储过程:AddEdit_Order_Info、Delete_Order_Info、Search_Order_Info,下面先列出相关代码,然后作总体分析。
一、AddEdit_Order_Info
/*************************************************************
** Name : AddEdit_Order_Info
** Creater : PPCoder Designed By PPCode Studio(PPTech.Net)
** Create Date : -9-6 8:30:17
** Modifer : Rexsp
** Modify Date : 2004-9-6 8:30:17
** Description : AddEdit information for Order_Info
**************************************************************/
ALTER PROCEDURE dbo.AddEdit_Order_Info
(
@OrderStateID Int = -1,
@OrderStateID_Min Int = -1,
@OrderStateID_Max Int = -1,
@OrderUserID Int = -1,
@OrderUserID_Min Int = -1,
@OrderUserID_Max Int = -1,
@OrderID Int = -1,
@OrderID_Min Int = -1,
@OrderID_Max Int = -1,
@ProductID Int = -1,
@ProductID_Min Int = -1,
@ProductID_Max Int = -1,
@CustomizeID Int = -1,
@CustomizeID_Min Int = -1,
@CustomizeID_Max Int = -1,
@OutID INT = 0 OUTPUT
)
AS
IF @OrderID=-1
BEGIN
INSERT INTO [Order_Info] (
[OrderStateID],
[OrderUserID],
[ProductID],
[CustomizeID]
)
VALUES(
@OrderStateID,
@OrderUserID,
@ProductID,
@CustomizeID
)
Set @OutID = @@IDENTITY
END
ELSE
BEGIN
DECLARE @strSQL NVARCHAR(1000)
SET @strSQL = 'UPDATE [Order_Info] SET @tmpOrderID = @tmpOrderID'
IF @OrderStateID -1
BEGIN
SET @strSQL = @strSQL + ', [OrderStateID] = @tmpOrderStateID'
END
IF @OrderUserID -1
BEGIN
SET @strSQL = @strSQL + ', [OrderUserID] = @tmpOrderUserID'
END
IF @ProductID -1
BEGIN
SET @strSQL = @strSQL + ', [ProductID] = @tmpProductID'
END
IF @CustomizeID -1
BEGIN
SET @strSQL = @strSQL + ', [CustomizeID] = @tmpCustomizeID'
END
SET @strSQL = @strSQL + ' WHERE [OrderID] = @tmpOrderID'
BEGIN TRAN
EXECUTE sp_executesql @strSQL, N'
@tmpOrderStateID INT,
@tmpOrderUserID INT,
@tmpOrderID INT,
@tmpProductID INT,
@tmpCustomizeID INT',
@tmpOrderStateID=@OrderStateID,
@tmpOrderUserID=@OrderUserID,
@tmpOrderID=@OrderID,
@tmpProductID=@ProductID,
@tmpCustomizeID=@CustomizeID
Set @OutID = @OrderID
IF @@error!=0
BEGIN
ROLLBACK
END
ELSE
BEGIN
COMMIT
END
END
RETURN
二、Delete_Order_Info
/*************************************************************
** Name : Delete_Order_Info
** Creater : PPCoder Designed By PPCode Studio(PPTech.Net)
** Create Date : 2004-9-6 8:30:17
** Modifer : Rexsp
** Modify Date : 2004-9-6 8:30:17
** Description : Delete information for Order_Info
**************************************************************/
ALTER PROCEDURE dbo.Delete_Order_Info
(
@OrderStateID Int = -1,
@OrderStateID_Min Int = -1,
@OrderStateID_Max Int = -1,
@OrderUserID Int = -1,
@OrderUserID_Min Int = -1,
@OrderUserID_Max Int = -1,
@OrderID Int = -1,
@OrderID_Min Int = -1,
@OrderID_Max Int = -1,
@ProductID Int = -1,
@ProductID_Min Int = -1,
@ProductID_Max Int = -1,
@CustomizeID Int = -1,
@CustomizeID_Min Int = -1,
@CustomizeID_Max Int = -1,
@OutID INT = 0 OUTPUT
)
AS
DECLARE @strSQL NVARCHAR(1000)
SET @strSQL = 'DELETE FROM [Order_Info] WHERE @tmpOrderID = @tmpOrderID '
IF @OrderStateID-1
BEGIN
SET @strSQL = @strSQL + ' AND rderStateID = @tmpOrderStateID'
END
IF @OrderStateID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderStateID_Min = @tmpOrderStateID_Min'
END
IF @OrderStateID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderStateID_Max = @tmpOrderStateID_Max'
END
IF @OrderUserID-1
BEGIN
SET @strSQL = @strSQL + ' AND rderUserID = @tmpOrderUserID'
END
IF @OrderUserID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderUserID_Min = @tmpOrderUserID_Min'
END
IF @OrderUserID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderUserID_Max = @tmpOrderUserID_Max'
END
IF @OrderID-1
BEGIN
SET @strSQL = @strSQL + ' AND rderID = @tmpOrderID'
END
IF @OrderID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderID_Min = @tmpOrderID_Min'
END
IF @OrderID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderID_Max = @tmpOrderID_Max'
END
IF @ProductID-1
BEGIN
SET @strSQL = @strSQL + ' AND ProductID = @tmpProductID'
END
IF @ProductID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND ProductID_Min = @tmpProductID_Min'
END
IF @ProductID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND ProductID_Max = @tmpProductID_Max'
END
IF @CustomizeID-1
BEGIN
SET @strSQL = @strSQL + ' AND CustomizeID = @tmpCustomizeID'
END
IF @CustomizeID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND CustomizeID_Min = @tmpCustomizeID_Min'
END
IF @CustomizeID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND CustomizeID_Max = @tmpCustomizeID_Max'
END
BEGIN TRAN
EXECUTE sp_executesql @strSQL, N'
@tmpOrderStateID INT,
@tmpOrderUserID INT,
@tmpOrderID INT,
@tmpProductID INT,
@tmpCustomizeID INT',
@tmpOrderStateID=@OrderStateID,
@tmpOrderUserID=@OrderUserID,
@tmpOrderID=@OrderID,
@tmpProductID=@ProductID,
@tmpCustomizeID=@CustomizeID
Set @OutID = @OrderID
IF @@error!=0
BEGIN
ROLLBACK
END
ELSE
BEGIN
COMMIT
END
RETURN
三、 Search_Order_Info
/*************************************************************
** Name : Search_Order_Info
** Creater : PPCoder Designed By PPCode Studio(PPTech.Net)
** Create Date : 2004-9-6 8:30:17
** Modifer : Rexsp
** Modify Date : 2004-9-6 8:30:17
** Description : Search information for Order_Info
**************************************************************/
ALTER PROCEDURE dbo.Search_Order_Info
(
@OrderStateID Int = -1,
@OrderStateID_Min Int = -1,
@OrderStateID_Max Int = -1,
@OrderUserID Int = -1,
@OrderUserID_Min Int = -1,
@OrderUserID_Max Int = -1,
@OrderID Int = -1,
@OrderID_Min Int = -1,
@OrderID_Max Int = -1,
@ProductID Int = -1,
@ProductID_Min Int = -1,
@ProductID_Max Int = -1,
@CustomizeID Int = -1,
@CustomizeID_Min Int = -1,
@CustomizeID_Max Int = -1,
@ReturnCount INT=-1,
@OutID INT = 0 OUTPUT
)
AS
DECLARE @strSQL NVARCHAR(1000)
IF @ReturnCount-1
BEGIN
SET @strSQL = 'SELECT TOP '+@ReturnCount+' * FROM [Order_Info] WHERE @tmpOrderID = @tmpOrderID '
END
ELSE
BEGIN
SET @strSQL = 'SELECT * FROM [Order_Info] WHERE @tmpOrderID = @tmpOrderID '
END
IF @OrderStateID-1
BEGIN
SET @strSQL = @strSQL + ' AND rderStateID = @tmpOrderStateID'
END
IF @OrderStateID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderStateID_Min = @tmpOrderStateID_Min'
END
IF @OrderStateID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderStateID_Max = @tmpOrderStateID_Max'
END
IF @OrderUserID-1
BEGIN
SET @strSQL = @strSQL + ' AND rderUserID = @tmpOrderUserID'
END
IF @OrderUserID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderUserID_Min = @tmpOrderUserID_Min'
END
IF @OrderUserID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderUserID_Max = @tmpOrderUserID_Max'
END
IF @OrderID-1
BEGIN
SET @strSQL = @strSQL + ' AND rderID = @tmpOrderID'
END
IF @OrderID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderID_Min = @tmpOrderID_Min'
END
IF @OrderID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND OrderID_Max = @tmpOrderID_Max'
END
IF @ProductID-1
BEGIN
SET @strSQL = @strSQL + ' AND ProductID = @tmpProductID'
END
IF @ProductID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND ProductID_Min = @tmpProductID_Min'
END
IF @ProductID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND ProductID_Max = @tmpProductID_Max'
END
IF @CustomizeID-1
BEGIN
SET @strSQL = @strSQL + ' AND CustomizeID = @tmpCustomizeID'
END
IF @CustomizeID_Min-1
BEGIN
SET @strSQL = @strSQL + ' AND CustomizeID_Min = @tmpCustomizeID_Min'
END
IF @CustomizeID_Max-1
BEGIN
SET @strSQL = @strSQL + ' AND CustomizeID_Max = @tmpCustomizeID_Max'
END
BEGIN TRAN
EXECUTE sp_executesql @strSQL, N'
@tmpOrderStateID INT,
@tmpOrderUserID INT,
@tmpOrderID INT,
@tmpProductID INT,
@tmpCustomizeID INT',
@tmpOrderStateID=@OrderStateID,
@tmpOrderUserID=@OrderUserID,
@tmpOrderID=@OrderID,
@tmpProductID=@ProductID,
@tmpCustomizeID=@CustomizeID
Set @OutID = @OrderID
IF @@error!=0
BEGIN
ROLLBACK
END
ELSE
BEGIN
COMMIT
END
分析:
1、 三个存储过程的入参基本上相同,只有Search_Order_Info多了一个@ReturnCount用来控制搜索信息的条数的,
入参很有特点:与数据表字段的扩展对应。扩展方式有三种:数字型和日期型扩展出“极小”和“极大”两个属性,例如数字型的OrderStateID对应的参数有三个@OrderStateID、@OrderStateID_Min 、@OrderStateID_Max ,时间型的AddTime对应@AddTime、@AddTime_Rof、@AddTime_Eof ;如果是字符型的,则会扩展出一个用来进行模糊搜索的属性,例如Title对应@Title、@Title_Like。之所以这样设计,是为了组合出更具适应性的条件语句。三个存储过程都有一个出参,就是表的唯一标识ID。这个主要在“添加和更新”操作中使用。当然搜索的时候也可以当唯一键返回。这个唯一标识ID也是来判断是Insert或Update的标识。
2、 入参都有赋初值,然后动态构建Sql语句的时候,会判断各入参是否等于初值,如果不等于表示是外面传进来的传,便参与Sql语句的构建。这种灵活性是程序适应性的保证。这样,我们就可以在程序员通过控制是否给入参传值来判断是否要进行某一栏位进行更新或是否要把某一栏位的信息参与条件语句的构成。
3、 用系统存储过程sp_executesql来执行Sql语句,完全数据库操作。用系统存储过程来执行sql语句有一个好处,就是可以实现特殊字符的自动转义。
4、 三个存储过程都有统一的构建规律,所以可以使用自动化工具依据表结构直接生成。
篇5:一问一答:存储过程经典问题数据库教程
存储过程|问题
只涉及到一个表:xkb_treeNode
表结构是这样:
node_id int //节点id
parentNode_id int //父节点id
node_text varchar //节点内容
isModule bit //是否叶子节点
现在保存的数据有:
node_id parentNode_id node_text isModule
1 -1 语言与文学 0
2 -1 数学 0
3 -1 技术 0
4 1 语文 0
5 1 外语 0
6 5 英语 0
7 6 初中英语 0
8 7 特斯塔 1
9 4 测定是2 1
10 2 测试3 1
现在问题是:
能否通过做一个存储过程,
根据表中的isModule字段的取值(取值为1的表示最终叶子结点),
比如“特斯塔”为叶子节点,层层向上递进找到”特斯塔“的祖先节点:
特斯塔-〉初中英语-〉英语-〉外语-〉语言与文学
即通过”特斯塔“找到”语言与文学“来
最终返回的形态为:
叶子节点id 父节点id 节点名称 祖先节点名称 祖先节点id
8 7 特斯塔 语言与文学 1
9 4 测定是2 语言与文学 1
10 2 测试3 数学 2
/////////////////////////////////////////////////////////////////////////
正确答案:
--生成测试数据
create table xkb_treeNode(
node_id int,
parentNode_id int,
node_textvarchar(10),
isModulebit)
insert into xkb_treeNode select 1 ,-1,'语言与文学',0
insert into xkb_treeNode select 2 ,-1,'数学',0
insert into xkb_treeNode select 3 ,-1,'技术',0
insert into xkb_treeNode select 4 , 1,'语文',0
insert into xkb_treeNode select 5 , 1,'外语',0
insert into xkb_treeNode select 6 , 5,'英语',0
insert into xkb_treeNode select 7 , 6,'初中英语',0
insert into xkb_treeNode select 8 , 7,'特斯塔' ,1
insert into xkb_treeNode select 9 , 4,'测定是2',1
insert into xkb_treeNode select 10 , 2,'测试3',1
--创建存储过程
create procedure sp_test
as
begin
select
a.node_id,
a.parentNode_id,
a.node_text,
b.node_id as ancestor_id ,
b.node_text as ancestor_text
into
#t
from
xkb_treeNode a,xkb_treeNode b
where
a.parentNode_id = b.node_id and a.isModule = 1
while(exists(select 1 from xkb_treeNode a,#t b where a.node_id=ancestor_id and a.parentNode_id != -1))
begin
update #t
set
ancestor_id = b.p_id,
ancestor_text = b.p_text
from
#t a,
(select
c.node_id,
d.node_id as p_id,
d.node_text as p_text
from
xkb_treeNode c,xkb_treeNode d
where
c.parentNode_id = d.node_id) b
where
a.ancestor_id = b.node_id
end
select * from #t order by node_id
end
--执行存储过程,结果楼主自己看
exec sp_test
篇6:用于执行(计算) 字符串表达式 的 TSQL 存储过程数据库教程
存储过程|执行|字符串
create procedure sp_CalcExpression
@Expression varchar(8000)
,@ decimal(10,2) out
as
declare @sql nvarchar(4000)
set @sql = N'set @ = ' + @Expression
exec SP_EXECUTESQL @sql ,N'@ decimal(10,2) out', @ out
select @
--==============================
--调用示例:
declare @x decimal(10,2)
exec sp_CalcExpression '(100 + 2.1)*0.01', @x out
select @x
--==============================
--相关帖子:
数据varbinary与varchar变换的问题
community.csdn.net/Expert/TopicView.asp?id=3619946
请教一个数据类型转换的问题
community.csdn.net/Expert/TopicView.asp?id=3569862
--================
--下面是支持 SQL 其他内置函数的
create procedure sp_ExecExpression
@Expression varchar(8000)
,@ varchar(8000) out
as
declare @sql nvarchar(4000)
set @sql = N'set @ = ' + @Expression
exec SP_EXECUTESQL @sql ,N'@ varchar(8000) out', @ out
select @
--调用示例:
declare @x varchar(100)
exec sp_ExecExpression 'left(''aBcD'',2)',@x
篇7:解密SQL的存储过程数据库教程
存储过程|解密
内容来自互联网,作者不明
drop procedure sp_decrypt
go
create PROCEDURE sp_decrypt (@objectName varchar(50))
AS
begin
begin transaction --add by playyuer
declare @objectname1 varchar(100)
declare @sql1 nvarchar(4000),@sql2 nvarchar(4000),@sql3 nvarchar(4000),@sql4 nvarchar(4000),@sql5 nvarchar(4000),@sql6 nvarchar(4000),@sql7 nvarchar(4000),@sql8 nvarchar(4000),@sql9 nvarchar(4000),@sql10 nvarchar(4000)
DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)
declare @i int , @t bigint
declare @m int,@n int,@q int
set @m=(SELECT max(colid) FROM syscomments WHERE id = object_id(@objectName))
set @n=1
--get encrypted data
create table #temp(colid int,ctext varbinary(8000))
insert #temp SELECT colid,ctext FROM syscomments WHERE id = object_id(@objectName)
set @sql1='ALTER PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '
--set @sql1='ALTER PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '
set @q=len(@sql1)
set @sql1=@sql1+REPLICATE('-',4000-@q)
select @sql2=REPLICATE('-',4000),@sql3=REPLICATE('-',4000),@sql4=REPLICATE('-',4000),@sql5=REPLICATE('-',4000),@sql6=REPLICATE('-',4000),@sql7=REPLICATE('-',4000),@sql8=REPLICATE('-',4000),@sql9=REPLICATE('-',4000),@sql10=REPLICATE('-',4000)
exec(@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9+@sql10)
while @n<=@m
begin
SET @OrigSpText1=(SELECT ctext FROM #temp WHERE colid=@n)
set @objectname1=@objectName+'_t'
SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n)
if @n=1
begin
SET @OrigSpText2='CREATE PROCEDURE '+ @objectName +' WITH ENCRYPTION AS '--
set @q=4000-len(@OrigSpText2)
set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)
end
else
begin
SET @OrigSpText2=REPLICATE('-', 4000)
end
--start counter
SET @i=1
--fill temporary variable
SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))
--loop
WHILE @i<=datalength(@OrigSpText1)/2
BEGIN
--reverse encryption (XOR original+bogus+bogus encrypted)
SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^
(UNICODE(substring(@OrigSpText2, @i, 1)) ^
UNICODE(substring(@OrigSpText3, @i, 1)))))
SET @i=@i+1
END
--drop original SP
--EXECUTE ('drop PROCEDURE '+ @objectName)
--remove encryption
--preserve case
SET @resultsp=REPLACE((@resultsp),'WITH ENCRYPTION', '')
SET @resultsp=REPLACE((@resultsp),'With Encryption', '')
SET @resultsp=REPLACE((@resultsp),'with encryption', '')
IF CHARINDEX('WITH ENCRYPTION',UPPER(@resultsp) )>0
SET @resultsp=REPLACE(UPPER(@resultsp),'WITH ENCRYPTION', '')
--replace Stored procedure without enryption
print @resultsp
--execute( @resultsp)
set @n=@n+1
end
drop table #temp
end
rollback transaction --add by playyuer
GO
篇8:创建作业的通用存储过程数据库教程
创建|存储过程
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_JobSet]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)drop procedure [dbo].[p_JobSet]GO
/*--定时调用存储过程
创建一个在指定时间,调用指定存储过程的作业 作业执行完成后会自动删除
--邹建 .07--*/
/*--调用示例
exec p_JobSet 'master.dbo.xp_cmdshell','2004-1-1 10:30'--*/create proc p_JobSet@prorcname sysname, --要调用定时调用的存储过程名,如果不在当前库中,则用:库名.所有者名.存储过程名@job_date datetime --存储过程的执行时间(包括时间信息)asdeclare @dbname sysname,@jobname sysname ,@date int,@time int
select @jobname='定时发送作业_'+cast(newid as varchar(36)) ,@date=convert(varchar,@job_date,112) ,@time=replace(convert(varchar,@job_date,108),':','')
if exists(select 1 from msdb..sysjobs where name=@jobname) exec msdb..sp_delete_job @job_name=@jobname
--创建作业exec msdb..sp_add_job @job_name=@jobname,@delete_level=1
--创建作业步骤declare @sql varchar(800)select @sql='exec '+@prorcname ,@dbname=db_name()
exec msdb..sp_add_jobstep @job_name=@jobname, @step_name = '发送处理步骤', @subsystem = 'TSQL', @database_name=@dbname, @command = @sql, @retry_attempts = 5, --重试次数 @retry_interval = 5 --重试间隔
--创建调度EXEC msdb..sp_add_jobschedule @job_name = @jobname, @name = '时间安排', @enabled = 1, @freq_type = 1, @active_start_date = @date, @active_start_time = @time
-- 添加目标服务器EXEC msdb.dbo.sp_add_jobserver @job_name = @jobname , @server_name = N'(local)' go
篇9:关于未能找到存储过程 master..xpjdbcopen数据库教程
存储过程
将安装的 Microsoft SQL Server Driver for JDBC 目录下的文件 sqljdbc.dll 从目录 C:Program FilesMicrosoft SQL Server 2000 Driver for JDBC QLServer JTA 拷贝到 SQL Server 的 “binn” 目录下 (看起来像这样 C:Program FilesMicrosoft SQL ServerMSSQLBinn). 然后用查询分析器打开 instjdbc.sql 脚本,这个脚本在目录 C:Program FilesMicrosoft SQL Server 2000 Driver for JDBC QLServer JTA. 运行这个脚本将安装一些扩展的存储过程,这样我们就可以在WebLogic中引用文件 sqljdbc.dll了.篇10:购物车的存储过程学习数据库教程
存储过程|购物车
从来没有接触过存储过程,为了这个项目写了几个存储过程,就当是学习了,呵呵,这个购物车的存储过程中使用了Table(表),Cursor(游标)变量。
要求如下:
一个商品表[Ware],里面包含有的字段有ID,MarketPrice,MemberPrice,VipPrice等等,还一个会员购物车[MemberCar]数据表。包括的有ID,MemberID,WareID,WareNum等等。现要求是能取得购物车表里的所有数据和MarketPrice*WareNum(所有商品和)的总价钱,即有N件商品就获取这N件商品的总价钱而不是单一的价钱。本来在客户端里直接根据购物车[MemberCar]表的数据读取商品表[Ware]里的数据,再用变量累加即可的。但问题却是,购物车里的所有商品显示使用了分页显示。所以累加时就出问题,如果为了累加这些价钱而在分页循环显示后再加一个循环所有记录来累加价钱数据,这样不是不行,但效率就可想而知了!!!
现一个解决方法就是,重新构造一个购物车表的镜像,但却多了商品的几个价钱总数字段。即MarketPrice*WareNum(单一商品)。从而读取购物车时不是读取原来购物车数据表,而是读取这个镜像数据表,并在读取时累加这些总价钱。
存储过程代码如下:
----#####################################################################################
----# 过程作用:返回用户购物车里的所有数据,并包含统计了商品的价钱 (价钱=商品表的价格*购物车表里的数量)
----# 作者:死在水中的鱼
----# 日期:2004年10月15日
----#####################################################################################
CREATE PROCEDURE MemberCar_Info @MemberID INT AS
--使用此句才能保持客户端的数据
SET NOCOUNT ON
DECLARE @Car_ID int,@Car_WareID int,@Car_WareNum smallINt
DECLARE @Car_TotalMemberPrice Numeric(8,2),@Car_TotalMarketPrice Numeric(8,2),@Car_TotalVipPrice Numeric(8,2)
--定义一个查询MemberCar表的游标变量,
获取数据
DECLARE Car_Cursor Cursor For
Select ID,WareID,WareNum From [MemberCar] Where MemberID=@MemberID And IsPay=0
--建立一个临时表变量
DECLARE @Car_Table Table (ID INT,
WareID INT,WareNum SmallINT,MarketPrice Numeric(8,2),MemberPrice Numeric(8,2),VipPrice Numeric(8,2))
--打开MemberCar表提取数据到临时变量
OPEN Car_Cursor
FETCH NEXT FROM Car_Cursor INTO @Car_ID,@Car_WareID,@Car_WareNum
WHILE @@FETCH_STATUS = 0
BEGIN
--取得商品的总市场价、总会员价和总VIP价
Select @Car_TotalMarketPrice=MarketPrice*@Car_WareNum,@Car_TotalMemberPrice=MemberPrice*@Car_WareNum,@Car_TotalVipPrice=VipPrice*@Car_WareNum From [Ware] Where ID=@Car_WareID
--添加进临时变量表
INSERT INTO @Car_Table (ID,WareID,WareNum,MarketPrice,MemberPrice,VipPrice) Values (@Car_ID,@Car_WareID,@Car_WareNum,@Car_TotalMarketPrice,@Car_TotalMemberPrice,@Car_TotalVipPrice)
-- 没有到表尾,继续提取数据到临时变量
FETCH NEXT FROM Car_Cursor INTO @Car_ID,@Car_WareID,@Car_WareNum
END
--关闭MemberCar数据库的游标
CLOSE Car_Cursor
DEALLOCATE Car_Cursor
--返回最终数据表
SELECT * FROM @Car_Table
GO
要求表达不是很清楚,各位原谅...
★ 如何恢复MYSQL实体文件MYI,MYD到数据库中数据库教程
★ 快速从Excel表格中提取数据中的Office宏EXCEL基本教程
【存储过程替换text,ntext列中的字符串数据库教程(共10篇)】相关文章:
优化其索引的小技巧数据库教程2022-12-31
ACCESS数据库中Field对象的caption属性读写数据库教程2023-06-16
shell问答16:批量修改文件名后缀Unix系统2022-11-25
工作计划模板电子表格2022-05-07
Word 用重复键入提高录入速度2022-12-05
Excel中用条件格式为单元格自动加边框EXCEL基本教程2023-05-21
几道PHP笔试题2022-07-22
窗体动态效果的实现数据库教程2022-08-15
Excel自动录入性别2022-04-30
检查Oracle数据库中不合理的sql语句数据库教程2023-01-19