Mar*_*ter 98 sql t-sql sql-server scripting sql-server-2005
在SQL Server 2005中,是否存在在SQL脚本或存储过程中声明的一次性使用或本地函数的概念?我想在我正在编写的脚本中抽象出一些复杂性,但它需要能够声明一个函数.
只是好奇.
Ron*_*age 81
您可以创建临时存储过程,如:
create procedure #mytemp as
begin
select getdate() into #mytemptable;
end
Run Code Online (Sandbox Code Playgroud)
在SQL脚本中,但不是函数.你可以让proc将它的结果存储在临时表中,然后在脚本中使用该信息.
Joe*_*orn 63
您可以CREATE Function
在脚本开头DROP Function
附近和结尾附近拨打电话.
Wel*_*bog 24
通用表表达式允许您定义基本上仅在select,insert,update和delete语句范围内的视图.根据您的需要,它们非常有用.
Tmd*_*ean 11
我知道我可能因为建议动态SQL而受到批评,但有时这是一个很好的解决方案.在考虑之前,请确保您了解安全隐患.
DECLARE @add_a_b_func nvarchar(4000) = N'SELECT @c = @a + @b;';
DECLARE @add_a_b_parm nvarchar(500) = N'@a int, @b int, @c int OUTPUT';
DECLARE @result int;
EXEC sp_executesql @add_a_b_func, @add_a_b_parm, 2, 3, @c = @result OUTPUT;
PRINT CONVERT(varchar, @result); -- prints '5'
Run Code Online (Sandbox Code Playgroud)
小智 6
下面是我过去用来满足 MS SQL 中标量 UDF 的需求:
IF OBJECT_ID('tempdb..##fn_Divide') IS NOT NULL DROP PROCEDURE ##fn_Divide
GO
CREATE PROCEDURE ##fn_Divide (@Numerator Real, @Denominator Real) AS
BEGIN
SELECT Division =
CASE WHEN @Denominator != 0 AND @Denominator is NOT NULL AND @Numerator != 0 AND @Numerator is NOT NULL THEN
@Numerator / @Denominator
ELSE
0
END
RETURN
END
GO
Exec ##fn_Divide 6,4
Run Code Online (Sandbox Code Playgroud)
这种方法使用 PROCEDURE 的全局变量,使您不仅可以在脚本中使用该函数,还可以在动态 SQL 需求中使用该函数。
归档时间: |
|
查看次数: |
93952 次 |
最近记录: |