Этот запрос T-SQL выполнен с ошибками: Неверное имя столбца, пожалуйста, помогите - PullRequest
0 голосов
/ 26 января 2011

У меня есть следующий оператор SQL для выбора случайного значения, которого нет в таблице БД:

select CONVERT(INT, 1 + 999999999 * rand()) as NEW_DVAL
WHERE NEW_DVAL NOT IN (SELECT FIELD_DVAL FROM dbo.MASTER_REF)

Оно завершено с ошибками: Неверное имя столбца.

Iне найти способ сделать это, пожалуйста, помогите.

Спасибо!William

Ответы [ 2 ]

2 голосов
/ 26 января 2011

если вы хотите получить гарантированное возвращаемое значение, если в таблицу не включены все возможные значения, вам нужно будет продолжать генерировать новые случайности при столкновении, что-то вроде этого:

DECLARE @NEW_DVAL AS INT;

WHILE 1=1
BEGIN
   SET @NEW_DVAL = CONVERT(INT, 1 + 999999999 * RAND());

   IF NOT EXISTS(SELECT * FROM dbo.MASTER_REF WHERE @NEW_DVAL = FIELD_DVAL)
      BREAK;
END;

SELECT @NEW_DVAL;
1 голос
/ 26 января 2011

К сожалению, вы не можете использовать псевдоним ("as NEW_DVAL") в предложении where. Вы можете сделать это:

 select NEW_DVAL from (
   select CONVERT(INT, 1 + 999999999 * rand()) as NEW_DVAL
 ) a
 WHERE NEW_DVAL NOT IN (SELECT FIELD_DVAL FROM dbo.MASTER_REF)

Однако я подозреваю, что ваш запрос все равно не будет выполнять то, что вы хотите. Бит «select convert (...)» даст вам ОДНУ строку, которую бит «где» либо отфильтрует, либо нет.

Если случайно выбранный новый dval уже существует, запрос не вернет ни одной строки - он не будет автоматически зацикливаться, пока не найдет неиспользованную.

Взгляните на K Ответ Иванова для решения этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...