我有一个存储过程,它将结果返回到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'。
你能帮忙吗?
谢谢, 阿赫亚
答案 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
表,如果存在,请根据您的具体情况修改问题。