Неверное имя столбца "USER_SOURCE" - PullRequest
2 голосов
/ 09 января 2012

У меня есть хранимая процедура, которая возвращает результат в выходном параметре xml @Data

Чтобы назначить данные в коде XML, это

SELECT @data= (
    SELECT DISTINCT 
        CONVERT(varchar(2),u.USER_SOURCE ) + '~' + 
        CONVERT(varchar(20), u.[USER_ID]) + '-' +
        CONVERT(varchar(10), u.DEALER_ID) as USER_DEALER_ID
    FROM #users u FOR XML RAW('users')) 

Когда я выполняю процедуру в SQLСервер Mgmt Studio, я вижу результат ОК.

Эта процедура вызвана из другой процедуры, и эта родительская процедура используется в SSRS.

В SSRS я получаю ошибку

Не удалось выполнить запрос для набора данных 'DataSet1'.Неверное имя столбца 'USER_SOURCE'.Неверное имя столбца 'USER_ID'.Неверное имя столбца 'DEALER_ID'.

Не могли бы вы помочь?

Спасибо, Четан

1 Ответ

3 голосов
/ 09 января 2012

Вот скрипт, который, я думаю, воспроизводит проблему, идентичную вашей:

CREATE PROCEDURE TestTmpTable
  @value varchar(20)
AS
BEGIN
  CREATE TABLE #test (id int IDENTITY, value varchar(20));
  INSERT INTO #test (value) VALUES (@value)
  SELECT * FROM #test;
  DROP TABLE #test;
END

GO

CREATE TABLE #test (id int IDENTITY, value2 varchar(20));
EXEC TestTmpTable 'some text';
SELECT * FROM #test;
DROP TABLE #test;

GO

DROP PROCEDURE TestTmpTable

Как видите, здесь есть две таблицы #test, одна создается в хранимой процедуре, другая -в пакете, который вызывает хранимую процедуру.Они имеют разные структуры: один имеет столбец с именем value, другой - с именем value2.Если вы запустите скрипт, вы увидите эту ошибку:

Msg 207, Level 16, State 1, Procedure TestTmpTable, Line 6
Invalid column name 'value'.

В данный момент я не могу указать вам на соответствующую документацию, но для меня очевидно, что некоторая предварительная проверка именипроисходит непосредственно перед казнью ИП.На этом этапе обнаруживается несоответствие между именами столбцов, на которые есть ссылки в хранимой процедуре, и именами, которые фактически присутствуют в уже существующей таблице , что делает выполнение невозможным.

Если вы измените value2 to value, скрипт будет работать без проблем, и в выходных данных будет два набора строк, один со значением 'some text', другой пустой.И, конечно, скрипт будет работать, если вы удалите все части, относящиеся к внешней таблице #test.

Итак, проверьте места, где вызывается ваша процедура, чтобы увидеть, может ли существовать какая-либо другая таблица #usersв этот момент, и если да, исправьте проблему в соответствии с вашей ситуацией.

...