创建全局声明

时间:2015-03-11 17:23:56

标签: sql sql-server sql-server-2008 tsql variables

我有多个存储过程使用相同的声明,并且值始终保持不变。

以下是重复使用声明的示例:

DECLARE @_status_PO_Auto_Approved as int
DECLARE @_status_PO_Invoice_Exceeds_PO_Amount as int
DECLARE @_status_PO_Item_Code_Mismatch as int

SET @_status_PO_Auto_Approved = 2
SET @_status_PO_Invoice_Exceeds_PO_Amount = 15
SET @_status_PO_Item_Code_Mismatch = 16

如何将这些声明设为全局,以便我可以在不同的程序中使用它们?

2 个答案:

答案 0 :(得分:3)

你做不到。你可以做以下几点之一:

  • 将它们移动到标量函数
CREATE FUNCTION dbo.fn_status_PO_Auto_Approved ...
  • 编写SQLCMD脚本以使用脚本范围变量生成这些值。

  • 我的个人偏好,创建一个包含两个(或更多)列的配置表,即

VariableName                          Value
_status_PO_Auto_Approved              2
_status_PO_Invoice_Exceeds_PO_Amount  15

等。然后,您可以添加约束和诸如此类的内容,以确保值以您需要的任何方式唯一和/或受限制。

答案 1 :(得分:1)

如果值仅用于查询,您也可以将它们声明为视图:

CREATE VIEW dbo._status_PO
AS
SELECT
  Auto_Approved             = 2,
  Invoice_Exceeds_PO_Amount = 15,
  Item_Code_Mismatch        = 16
;

和CROSS JOIN在查询中查看使用值:

SELECT
  ...
FROM
  ...
  CROSS JOIN dbo._status_PO
WHERE
  ... = _status_PO.Auto_Approved
;