Я знаю, что об этом спрашивали раньше. Я исследовал предыдущие ответы и не смог найти решение своей проблемы. Что самое любопытное в моем случае, так это то, что один и тот же код работает в тестовой базе данных, но не в рабочей среде, хотя они абсолютно одинаковы. Сама процедура очень долгая, но мне удалось выделить проблемную часть. Я надеюсь, что кто-то увидит что-то, чего не вижу я, потому что я потерял 2 дня на этом и до сих пор понятия не имею:
DECLARE luUpdateCursor CURSOR FORWARD_ONLY STATIC READ_ONLY FOR
SELECT Id, DisplayFormat, LookupName FROM #ProductResults WHERE Value IS NOT NULL AND LEN(LTRIM(RTRIM(LookupName))) > 0
OPEN luUpdateCursor
FETCH NEXT FROM luUpdateCursor
INTO @Id, @DisplayFormat, @LookUpName
WHILE @@FETCH_STATUS = 0
BEGIN
IF @LocaleID = @SystemLocaleId
BEGIN
SET @strSql = '
UPDATE PR
SET PR.Value = ' + REPLACE(REPLACE(@DisplayFormat,'[','lk.['),',' , '+ '','' + ') + '
FROM
#ProductResults PR
INNER JOIN
tblk_' + RTRIM(@LookUpName) + ' lk WITH(NOLOCK) ON PR.Value = lk.Id
WHERE
PR.Id = ' + CONVERT(NVARCHAR,@Id)
END
ELSE
BEGIN
SET @strSql = '
UPDATE PR
SET PR.Value = COALESCE(' + REPLACE(REPLACE(@DisplayFormat,'[','lkl.['),',' , '+ '','' + ') + ',' + REPLACE(REPLACE(@DisplayFormat,'[','lk.['),',' , '+
'','' + ') + ')
FROM
#ProductResults PR
INNER JOIN
tblk_' + RTRIM(@LookUpName) + ' lk WITH(NOLOCK) ON PR.Value = lk.Id
LEFT OUTER JOIN
tblk_' + RTRIM(@LookUpName) + '_Locale lkl WITH(NOLOCK) ON PR.Value = lkl.fk_Id AND lkl.FK_Locale = ' + CAST(@LocaleID AS NVARCHAR(20)) + '
WHERE
PR.Id = ' + CONVERT(NVARCHAR,@Id)
END
EXECUTE sp_executesql @strSql;
FETCH NEXT FROM luUpdateCursor
INTO @Id, @DisplayFormat, @LookUpName
END
CLOSE luUpdateCursor
DEALLOCATE luUpdateCursor;
Таблица #ProductRESults имеет идентификатор INT, а DisplayFormat и LookupNAME оба являются NVarchar. Есть также один очень похожий запрос в процедуре, на самом деле такой же, но в другой таблице, и он работает, так что это меня очень беспокоит. Извините, если вопрос глупый.
@DisplayFormat
- person Jaydip Jadhav   schedule 05.10.2016-
. Это говорит о том, что он скрывается в данных, которые вы просматриваете с помощью этого курсора, поэтому, конечно, мы не можем помочь вам его найти. Это также может объяснить, почему он работает по-разному в разных базах данных (с разными данными). - person Damien_The_Unbeliever   schedule 05.10.2016