我已经看到了几种用于"克服"SQL Server中缺少常量的模式,但它们似乎都没有满足性能和可读性/可维护性问题.
在下面的示例中,假设我们在表上有一个完整的"状态"分类,选项似乎是:
-- StatusId 87 = Loaded
SELECT ... FROM [Table] WHERE StatusId = 87;
Run Code Online (Sandbox Code Playgroud)
WHERE子句引用友好名称.子查询:
SELECT ...
FROM [Table]
WHERE
StatusId = (SELECT StatusId FROM TableStatus WHERE StatusName = 'Loaded');
Run Code Online (Sandbox Code Playgroud)
或加入
SELECT ...
FROM [Table] t INNER JOIN TableStatus ts On t.StatusId = ts.StatusId
WHERE ts.StatusName = 'Loaded';
Run Code Online (Sandbox Code Playgroud)
CREATE Function LoadedStatus()
RETURNS INT
AS
BEGIN
RETURN 87
END;
Run Code Online (Sandbox Code Playgroud)
然后
SELECT ... FROM [Table] WHERE StatusId = LoadedStatus();
Run Code Online (Sandbox Code Playgroud)
(IMO会导致数据库中出现大量污染 - 在Oracle软件包中可能没问题)
CROSS APPLIED …