sql-server - 是否可以在sql-server中声明没有@符号的变量?
问题描述
我有这种情况,我不能在 sql 中使用 @ 符号。但是我想声明变量。有谁知道是否有其他方法可以在不使用@符号的情况下声明它们?
解决方案
一种解决方法是使用临时表。这增加了很多开销,影响了查询计划,并且需要更多的代码来实现相同的功能,但你可以让它工作。
请注意它们不是变量,没有@
.
说你不能这样做:
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')
尽管有一个不使用的奇怪要求@
,但您可能也无法使用#
...
推荐阅读
- amazon-web-services - CloudFormation create_stack 需要参数
- android - 尝试将 Hilt 与 Roomdb 结合使用时,找不到 androidx.room.RoomDatabase 的类文件
- postgresql - 无法加载 libpq.dll
- google-sheets - 删除重复项时谷歌表格查询
- processing - 如何为 Kinect 生成的点云添加颜色?
- javascript - 以流畅的方式显示 div
- javascript - 如何使用 onMouseHover 更改跨度状态?
- gradle-kotlin-dsl - Maven 发布自动时间戳
- dask - 无法从 jupyter 实验室启动新的 dask SLURM 集群 - “没有名为‘dask_jobqueue’的模块”
- symfony - Symfony 4 中使用 po/mo 文件的翻译(复数)