列名“USER_SOURCE”无效

时间:2012-01-09 13:15:15

标签: sql-server sql-server-2008 ssrs-2008 reporting-services

我有一个存储过程,它将结果返回到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 Server Mgmt Studio中执行该过程时,我可以看到结果OK。

此过程是从另一个过程调用的,并且该过程在SSRS中使用。

在SSRS中我收到错误

  

数据集'DataSet1'的查询执行失败。列名无效   'USER_SOURCE'。列名称“USER_ID”无效。列名无效   'DEALER_ID'。

你能帮忙吗?

谢谢, 阿赫亚

1 个答案:

答案 0 :(得分:3)

这是一个脚本,我认为它会重现与你的问题相同的问题:

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'.

目前我无法向您指出相关的文档文章,但对我来说很明显,在执行SP之前会立即进行一些初步的名称检查。在该阶段,将显示存储过程中引用的列名与现有表中实际存在的列名之间的差异,这将导致执行无法执行。

如果您将value2更改为value,则脚本将正常运行,输出中将有两个行集,一个具有'some text'值,另一个为空。当然,如果删除与外部#test表相关的所有部分,脚本将会起作用。

因此,请检查调用过程的位置,以查看当时是否存在任何其他#users表,如果存在,请根据您的具体情况修改问题。