首页 > 解决方案 > 是否可以在sql-server中声明没有@符号的变量?

问题描述

我有这种情况,我不能在 sql 中使用 @ 符号。但是我想声明变量。有谁知道是否有其他方法可以在不使用@符号的情况下声明它们?

标签: sql-servertsqlvariables

解决方案


一种解决方法是使用临时表。这增加了很多开销,影响了查询计划,并且需要更多的代码来实现相同的功能,但你可以让它工作。

请注意它们不是变量,没有@.

说你不能这样做:

DECLARE @FilterDate DATE = '2019-01-01'
DECLARE @FilterInt INT = 20

SELECT
    T.*
FROM
    SomeTable AS T
WHERE
    T.Date > @FilterDate AND
    T.Integer > @FilterInt

临时表的解决方法:

IF OBJECT_ID('tempdb..#Variables') IS NOT NULL
    DROP TABLE #Variables

CREATE TABLE #Variables (
    VariableName VARCHAR(100) PRIMARY KEY,
    Value VARCHAR(100))

INSERT INTO #Variables (
    VariableName,
    Value)
VALUES
    ('FilterDate', '2019-01-01'),
    ('FilterInt', '20')

SELECT
    T.*
FROM
    SomeTable AS T
WHERE
    T.Date > (SELECT CONVERT(DATE, V.Value) FROM #Variables AS V WHERE V.VariableName = 'FilterDate') AND
    T.Integer > (SELECT CONVERT(INT, V.Value) FROM #Variables AS V WHERE V.VariableName = 'FilterInt')

尽管有一个不使用的奇怪要求@,但您可能也无法使用#...


推荐阅读