当前位置: 代码迷 >> Sql Server >> 将两个存储过程 封装成一个通道口进行调用 {请各位大牛}
  详细解决方案

将两个存储过程 封装成一个通道口进行调用 {请各位大牛}

热度:88   发布时间:2016-04-24 10:20:44.0
将两个存储过程 封装成一个入口进行调用 {请各位大牛}
本帖最后由 gguozhenqian 于 2014-07-14 14:59:37 编辑

--数字转英文
CREATE PROCEDURE usp_Num2English
@Num INT,
@English VARCHAR(100) OUTPUT
AS
BEGIN
IF(@Num=1)
BEGIN
SET @English='one'
END
else IF(@Num=2)
BEGIN
SET @English='two'
END
END
GO

--英文转数字
CREATE PROCEDURE usp_English2Num
@English VARCHAR(100) ,
@Num INT OUTPUT
AS
BEGIN
IF(@English='one')
BEGIN
SET @Num=1
END
else IF(@English='two')
BEGIN
SET @Num=2
END
END
GO

--执行
DECLARE @Num INT ,@English VARCHAR(100)
SET @Num=1
EXEC usp_Num2English @Num,@English OUTPUT
select @English

DECLARE @Num INT ,@English VARCHAR(100)
SET @English='one'
EXEC usp_English2Num @English,@Num OUTPUT
select @Num



要求:
新增一个存储过程 Test,作为中间入口

DECLARE @Num INT ,@English VARCHAR(100)
SET @Num=1
exec test @Num, @English output, 'E'

DECLARE @Num INT ,@English VARCHAR(100)
SET @English='one'
exec test @English,@Num output, 'N'


请注意 test的参数位置!!!

------解决方案--------------------
try:


--
if object_id('usp_test') Is not null
Drop Proc usp_test
Go
create proc usp_test 
(
@pram_Input nvarchar(100),
@pram_Ouput nvarchar(100) output
)
as
set nocount on 
if(patindex('%[A-Z]%',@pram_Input) >0 )
exec usp_English2Num @pram_Input,@pram_Ouput output
else
exec usp_Num2English @pram_Input,@pram_Ouput output
go
--1
declare @pram_Ouput nvarchar(100)
exec usp_test N'One',@pram_Ouput output

print @pram_Ouput

/*
1
*/

go
--2
declare @pram_Ouput nvarchar(100)
exec usp_test 2,@pram_Ouput output
print @pram_Ouput

/*
two
*/    

------解决方案--------------------
做不到,参考
http://connect.microsoft.com/SQLServer/feedback/details/742018/t-sql-stored-procedure-parameter-overloading
------解决方案--------------------
如果不能用CONVERT函数,能想到的是在程序里面先对第三个参数做判断,然后调用不同的sp.
------解决方案--------------------

CREATE PROCEDURE test
@Input VARCHAR(100),
@Output VARCHAR(100) OUTPUT
,@Op nvarchar(10) = 'N'
AS
BEGIN
IF(@Op='N')
BEGIN
exec usp_English2Num @Input,@Output output
END
else 
BEGIN
exec usp_Num2English @Input,@Output output

END
END
GO


--执行
DECLARE @Num INT ,@English VARCHAR(100)
SET @Num=1
exec test @Num, @English output, 'E'
print @English

DECLARE @Num INT ,@English VARCHAR(100)
SET @English='one'
exec test @English,@Num output, 'N'
print @Num

------解决方案--------------------
输入、输出 都采用varchar(100),应该就没问题了
  相关解决方案