#sql-server #tsql
#sql-server #tsql
Вопрос:
Используя SQL Server 2000; Я пытаюсь определить действие, если значение в поле ВСТАВЛЕННОЙ записи соответствует одному из нескольких различных значений в поле в таблице. Поле y в TableB может быть «один», «два» или «три». ВСТАВЛЕННАЯ запись должна быть одной записью, и поэтому поле x должно быть единственным значением. Следовательно, учитывая приведенный ниже фрагмент кода, каков правильный синтаксис? В частности, куда идет «()» в операторе IF?
if select x from INSERTED in (select y from tableB)
and <another condition>
begin
<some code>
end
Комментарии:
1. Когда у вас есть что-то большее, чем простое одиночное сравнение, вам нужно обернуть все после
IF
, но передBEGIN
в круглых скобках.2. Нам было бы легче помочь, если бы вы могли выразить, чего вы пытаетесь достичь. Заставлять людей догадываться о вашем предполагаемом значении — пустая трата времени каждого.
Ответ №1:
Правильный синтаксис
IF EXISTS (SELECT * FROM TABLE1 WHERE X IN (1,2))
Begin
-- code
End
Ответ №2:
Вы можете сохранить отдельный флаг в переменных и использовать его в условии IF.
Declare @chkExist int
Select @chkExist = Count(*) from tableA x in (select y from tableB)
if ((@chkExist > 0) and (<another condition>))
begin
<some code>
end
Ответ №3:
Попробуйте «где существует» вместо «В»
if exists ( select null from tableA taAlias where (select null from tableB tbAlias where tbAlias.y = taAlias.x ) )
and 1=1
begin
Select 1 as 'YouNeedAtLeastOneLineOfCodeInThisBeginEnd'
end