分配变量以在查询中使用

Assigning variables to use in query

我正从 Oracle 迁移到 SQL 服务器,我注意到在查询中分配变量方面的差异。我想知道是否有人可以给我写一个简单的示例,说明我如何在 SSMS 中执行此操作?

在下面的示例中,我希望在 select 语句的开头分配变量 @date1,这样我就可以简单地更改顶部的日期,而不必在查询 @date1 被多次使用的地方。

SELECT *

FROM table

where date = @date1

谢谢

根据您的示例,语法如下:

DECLARE @date1 DATETIME
SET @date1 = '2017-01-01 00:00:00.000'

然后在您的查询中引用@date1,如上所示。

更广泛地说,语法是:

DECLARE @<name of variable> <type>
SET @<name of variable> = <value>
DECLARE @date1 DATE = '2018-04-11'

此代码可能没问题,但请注意日期格式:date (Transact-SQL) 以及使用 Date、Datetime 或 Datetime2 的需要。

-- Simple declares
DECLARE @Variable1 VARCHAR(100)
DECLARE @Variable2 DATE
DECLARE @VariableTable TABLE (
    numberColumnName INT,
    textColumnName VARCHAR(MAX))

-- Chained declares
DECLARE
    @Variable3 VARCHAR(100),
    @Variable4 INT

-- Declare with initiation
DECLARE @Variable5 INT = 150
DECLARE @Variable6 DATE = '2018-05-05' -- Implicit conversion (varchar to date)
DECLARE @Variable7 FLOAT = 1945.15 * 1648.12 / @Variable5 -- Expressions can be used
DECLARE @Variable8 INT = (SELECT COUNT(1) FROM sys.objects)

-- Chained declares with initiation
DECLARE
    @Variable9 VARCHAR(100) = 'Afla',
    @Variable10 INT = 9164 * @Variable5

-- Change variable values (without declaring)
SET @Variable1 = 'Some value'
SET @Variable2 = CONVERT(DATE, GETDATE())

以你的例子为例:

DECLARE @DateFilter DATE = '2018-05-16' -- Use ISO standard date format (yyyy-MM-dd) when you hard-code them as literals

SELECT
    *
FROM
    YourTable AS T
WHERE
    T.DateToFilter >= @DateFilter