sql-server - 列名无效 "USER_SOURCE"

标签 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 中执行该过程时,我可以看到结果正常。

此过程是从另一个过程调用的,并且该父过程在 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 之前立即进行了一些初步名称检查。在此阶段,存储过程中引用的列名与现有表中实际存在的列名之间的差异就会显现出来,从而导致执行变得不可能。

如果你改变value2value ,该脚本将毫无问题地运行,并且输出中将有两个行集,其中一个带有 'some text'值,其他为空。当然,如果您删除与外部 #test 相关的所有部分,该脚本将起作用。表。

因此,检查调用您的过程的位置,看看是否有其他 #users此时表可能已经存在,如果是,请根据您的情况修改问题。

关于sql-server - 列名无效 "USER_SOURCE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788980/

相关文章:

c# - SSIS 只读变量被更改

python - 查询 SQL Server 数据库时结果对象不返回行

asp.net - Dapper.net交易问题

reporting-services - SQL Server 报告服务 : 3rd-Party Chart Controls?

sql-server - 通过 URL 访问 SSRS 报告时需要传递什么凭据?

r - 从 R 查询 SQL Server 地理空间数据

SQL 服务器 : Check Upper Case or Lower Case after certain Character

sql-server - 如何记录存储过程调用?

sql-server - SQL Server中的编译错误和运行时错误之间的区别?

css - 为什么向 Sharepoint 2010 添加 ssrs 报告会在列中创建额外的空间