MS SQL 2000/7/6.5 自定义打印过程






2.43/5 (4投票s)
2003年12月19日

47714
此过程可以在另一个存储过程或函数中调用,并且在调试和开发中非常有用。
引言
SQL Server 的打印函数允许你打印任何数据类型的值/变量等。但是,如果你想在一个打印语句中打印多个变量或不同数据类型的值呢?例如 int
和 varchar
。你必须为每个变量使用转换,并将目标转换为 varchar
。
背景
当我进行从 Sybase 到 SQL Server 的迁移时,遇到了这个问题。Sybase 具有出色的打印函数,可以在单个打印语句中打印各种类型的局部变量。因此,我编写了一个 SQL 过程,可以在单个调用中打印最多 20 个局部变量?使用它并享受吧。
使用代码
只需在查询分析器中运行此脚本即可。
/*---------------------------------------------------------------*/
-- version inf 1.0
-- creation date 18/12/2003
-- created by Abhay dubey
-- purpose this procedure is capable to print
-- any type of argument which can be from 0 to 20 as a string.
-- drop procedure adPrint
/*------------------------------------------------------------*/
CREATE procedure adPrint (
@par1i sql_variant ='No value supplied in advance print' ,
@par2i sql_variant = '0',@par3i sql_variant = '0',
@par4i sql_variant = '0',
@par5i sql_variant = '0',@par6i sql_variant = '0',
@par7i sql_variant = '0',@par8i sql_variant = '0',
@par9i sql_variant = '0',@par10i sql_variant = '0',
@par11i sql_variant = '0',@par12i sql_variant = '0',
@par13i sql_variant = '0',@par14i sql_variant = '0',
@par15i sql_variant = '0',@par16i sql_variant = '0',
@par17i sql_variant = '0',@par18i sql_variant = '0',
@par19i sql_variant = '0',@par20i sql_variant = '0'
)
AS
BEGIN
DECLARE @var1 nvarchar(4000)
DECLARE @par1 nvarchar(255),
@par2 nvarchar(255),
@par3 nvarchar(255),
@par4 nvarchar(255),
@par5 nvarchar(255),
@par6 nvarchar(255),
@par7 nvarchar(255),
@par8 nvarchar(255),
@par9 nvarchar(255),
@par10 nvarchar(255),
@par11 nvarchar(255),
@par12 nvarchar(255),
@par13 nvarchar(255),
@par14 nvarchar(255),
@par15 nvarchar(255),
@par16 nvarchar(255),
@par17 nvarchar(255),
@par18 nvarchar(255),
@par19 nvarchar(255),
@par20 nvarchar(255)
--This portion of the code should be added in procedure
--to handle null parameters.
select @par1 = convert(varchar(255),isnull(@par1i,'0'))
select @par2 = convert(varchar(255),isnull(@par2i,'0'))
select @par3 = convert(varchar(255),isnull(@par3i,'0'))
select @par4 = convert(varchar(255),isnull(@par4i,'0'))
select @par5 = convert(varchar(255),isnull(@par5i,'0'))
select @par6 = convert(varchar(255),isnull(@par6i,'0'))
select @par7 = convert(varchar(255),isnull(@par7i,'0'))
select @par8 = convert(varchar(255),isnull(@par8i,'0'))
select @par9 = convert(varchar(255),isnull(@par9i,'0'))
select @par10 = convert(varchar(255),isnull(@par10i,'0'))
select @par11 = convert(varchar(255),isnull(@par11i,'0'))
select @par12 = convert(varchar(255),isnull(@par12i,'0'))
select @par13 = convert(varchar(255),isnull(@par13i,'0'))
select @par14 = convert(varchar(255),isnull(@par14i,'0'))
select @par15 = convert(varchar(255),isnull(@par15i,'0'))
select @par16 = convert(varchar(255),isnull(@par16i,'0'))
select @par17 = convert(varchar(255),isnull(@par17i,'0'))
select @par18 = convert(varchar(255),isnull(@par18i,'0'))
select @par19 = convert(varchar(255),isnull(@par19i,'0'))
select @par20 = convert(varchar(255),isnull(@par20i,'0'))
----This portion of the code should be added in procedure
-- to handle null parameters.
select @var1 = @par1
if(ltrim(rtrim(@par2)) = '0')
begin
select @var1 = @par1
goto print_here
--RETURN(@var1)
end
else if(ltrim(rtrim(@par3)) = '0')
begin
select @var1 = @par1 + @par2
goto print_here
end
else if(ltrim(rtrim(@par4)) = '0')
begin
select @var1 = @par1 + @par2 + @par3
goto print_here
end
else if(ltrim(rtrim(@par5)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4
goto print_here
end
--------------------------------------------------------------
else if(ltrim(rtrim(@par6)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5
goto print_here
end
else if(ltrim(rtrim(@par7)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 + @par6
goto print_here
end
else if(ltrim(rtrim(@par8)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 + @par6 + @par7
goto print_here
end
else if(ltrim(rtrim(@par9)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 + @par6 +
@par7 + @par8
goto print_here
end
else if(ltrim(rtrim(@par10)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 + @par6 +
@par7 + @par8 + @par9
goto print_here
end
else if(ltrim(rtrim(@par11)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10
goto print_here
end
else if(ltrim(rtrim(@par12)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10 + @par11
goto print_here
end
else if(ltrim(rtrim(@par13)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10 + @par11 + @par12
goto print_here
end
else if(ltrim(rtrim(@par14)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10 + @par11 + @par12 + @par13
goto print_here
end
else if(ltrim(rtrim(@par15)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 + @par6 +
@par7 + @par8 + @par9 + @par10 + @par11 + @par12 + @par13 + @par14
goto print_here
end
else if(ltrim(rtrim(@par16)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 + @par6 + @par7 +
@par8 + @par9 + @par10 + @par11 + @par12 + @par13 + @par14 + @par15
goto print_here
end
else if(ltrim(rtrim(@par17)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10 + @par11 +
@par12 + @par13 + @par14 + @par15 + @par16
goto print_here
end
else if(ltrim(rtrim(@par18)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10 + @par11 +
@par12 + @par13 + @par14 + @par15 + @par16 + @par17
goto print_here
end
else if(ltrim(rtrim(@par19)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10 + @par11 +
@par12 + @par13 + @par14 + @par15 + @par16 + @par17 + @par18
goto print_here
end
else if(ltrim(rtrim(@par20)) = '0')
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10 + @par11 +
@par12 + @par13 + @par14 + @par15 + @par16 + @par17 + @par18 + @par19
goto print_here
end
----------------------------------------------------------------
else
begin
select @var1 = @par1 + @par2 + @par3 + @par4 + @par5 +
@par6 + @par7 + @par8 + @par9 + @par10 + @par11 +
@par12 + @par13 + @par14 + @par15 + @par16 + @par17 +
@par18 + @par19 + @par20
goto print_here
end
print_here:
print @var1
--print len(@var1)
END
GO
关注点
我觉得 sql_variant
让程序员可以自由地编写任何数据类型转换的代码。