Sql server 是否可以在sql server中声明不带@符号的变量?

Sql server 是否可以在sql server中声明不带@符号的变量?,sql-server,tsql,variables,Sql Server,Tsql,Variables,在这种情况下,我不能在sql中使用@符号。然而,我想声明变量。有人知道有没有其他方法可以不用@符号来申报吗?你在这里运气不好: DECLARE语句通过以下方式初始化Transact-SQL变量: 指定一个名字名称必须有一个@作为第一个 字符。 分配系统提供的或用户定义的数据类型和长度。 对于数值变量,还指定了精度和比例。对于 XML类型的变量,可以指定可选的架构集合 将该值设置为NULL 一种解决方法是使用临时表。这会增加很多开销,影响查询计划,需要更多的代码才能实现相同的功能,但您可以让它正常

在这种情况下,我不能在sql中使用@符号。然而,我想声明变量。有人知道有没有其他方法可以不用@符号来申报吗?

你在这里运气不好:

DECLARE语句通过以下方式初始化Transact-SQL变量:

指定一个名字名称必须有一个@作为第一个 字符。

分配系统提供的或用户定义的数据类型和长度。 对于数值变量,还指定了精度和比例。对于 XML类型的变量,可以指定可选的架构集合

将该值设置为NULL


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

请注意它们不是变量,没有
@
就不能使用变量

说你不能这样做:

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')

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

您可以使用临时表。它的性能不会很好,但如果这对您来说不是问题,那么这可能会解决您使用@符号的问题。看看这个例子:

IF OBJECT_ID('tempdb..#var') IS NOT NULL
    DROP TABLE #var;
CREATE TABLE #var (var1 int);
INSERT INTO #var (var1) VALUES (12);
SELECT var1 FROM #var;
UPDATE #var SET var1 = 34;
SELECT var1 FROM #var;

你的键盘坏了吗?我想知道你不能使用@符号的情况是什么。如果您不能使用@符号,那么请使用@符号声明为全局变量,这将非常有趣。:-)等等,要避免使用
@
符号,您的解决方案是使用其中的两个。@@Santhana。。?O.ostackoverflow应该有一个“MacGyver”徽章,用以给出此类问题的公认解决方案。“虽然有一个不使用@的奇怪要求,但您可能也不能使用@”:)+1临时表是变量吗?应该注意的是,如果您可以将变量手工编码到临时表插入函数中,您可以将它们手工编码到原始查询中。只是说