Как работать с переменными, назначенными на SQL Server - PullRequest
0 голосов
/ 12 марта 2020

SQL Запрос к серверу:

DECLARE @comm decimal(12,2), 
        @amount decimal(12,2) 
SET @comm = 0

SELECT @amount = TotalAmount 
FROM Orders 
WHERE Id = 1

IF @amount > 25000
    @comm = 0.0005 * @amount;
ELSE
    @comm = 0

Я получаю сообщение об ошибке:

Неверный синтаксис рядом с'@comm'.

I я пытаюсь вычислить значение как @comm, как показано в коде. Но я всегда получаю синтаксическую ошибку около @comm. Можете ли вы сказать мне, почему это?

ПОСЛЕ ВСТАВКИ:

DECLARE @comm decimal(12,2), 
        @amount decimal(12,2) 
SET @comm = 0;

SELECT @amount = TotalAmount 
FROM Orders 
WHERE Id = 1;

IF @amount > 25000
    @comm = 0.0005 * @amount;
Else
    @comm = 0;

Ошибка:

Msg 102, уровень 15, состояние 1, строка 7
неверно синтаксис около '@ comm'

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Вам необходимо использовать SET или SELECT для назначения или изменения значения переменной.

DECLARE @comm decimal(12,2), @amount decimal(12,2) 
SET @comm=0
SELECT @amount=TotalAmount FROM Orders WHERE Id=1

IF @amount>25000
SET @comm=0.0005*@amount;
Else
SET @comm=0


GO

DECLARE @comm decimal(12,2), @amount decimal(12,2) 
SET @comm=0
SELECT @amount=TotalAmount FROM Orders WHERE Id=1

IF @amount>25000
SET @comm=0.0005*@amount;
Else
SET @comm=0
0 голосов
/ 12 марта 2020

Вы можете использовать case выражение:

SELECT @comm = (CASE WHEN TotalAmount > 25000 THEN TotalAmount * 0.0005 ELSE 0 END)
FROM Orders 
WHERE Id = 1;

Примечание. Если id = 1 имеет несколько совпадающих строк, вам необходимо использовать top (1):

SELECT TOP (1) @comm = (CASE WHEN TotalAmount > 25000 
                             THEN TotalAmount * 0.0005 
                             ELSE 0 
                        END)
FROM Orders 
WHERE Id = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...