我有一个存储过程,它在 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 中执行该过程时,我可以看到结果正常。
此过程是从另一个过程调用的,并且该父过程在 SSRS 中使用。
在 SSRS 中我收到错误
Query execution failed for dataset 'DataSet1'. Invalid column name 'USER_SOURCE'. Invalid column name 'USER_ID'. Invalid column name 'DEALER_ID'.
你能帮忙吗?
谢谢, 切坦
最佳答案
这是一个脚本,我认为它重现了与您的问题相同的问题:
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
此时表可能已经存在,如果是,请根据您的情况修改问题。
关于sql-server - 列名无效 "USER_SOURCE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788980/