此刻要非常清楚。我想不使用存储过程来创建临时表!
我是SSRS报告的新手,目前正在尝试完成一份大型报告。 我有多个数据集,每个数据集都使用相同的信息。我尝试在第一个数据集中创建临时表,并在最后一个数据集中删除表,但报告未运行。所以我有一些问题。
比如说我有以下
----------------- --------------
|Data-set 1 |---------------------------|Data Source |
|===============| | |============|
|Input | | |Use Single |
|===============| | |Transaction |
|@MyDate | | |enable |
|@ProcessorId | | |============|
|===============| |
|Variables | |
|===============| |
|@StartDate | |
|@EndDate | |
|Create #table | |
|---------------| |
|Insert Data | |
|into #table | |
|---------------| |
|return Dataset1| |
|specific data. | |
|===============| |
|
----------------- |
|Data-set 2 |---------------|
|===============| |
|Input | |
|===============| |
|@MyDate | |
|@ProcessorId | |
|===============| |
|Variables | |
|===============| |
|@StartDate | |
|@EndDate | |
|@Larges$Amount | |
|---------------| |
|Using #table | |
|return Dataset2| |
|specific data. | |
|===============| |
|
----------------- |
|Data-set 3 |---------------|
|===============|
|Input |
|===============|
|@MyDate |
|@ProcessorId |
|===============|
|Variables |
|===============|
|@StartDate |
|@EndDate |
|@reasonCode |
|@Amount |
|---------------|
|Using #table |
|return Dataset3|
|specific data. |
|---------------|
|Drop #table |
|===============|
这就是我认为它无需使用存储过程即可工作的方式。有谁告诉我,我做错了什么?
执行此操作我的其他数据会收到类似于查询执行失败的错误数据集'data-set2'无效对象名称'#table'
答案 0 :(得分:2)
这条线为我解决了。
SET FMTONLY OFF
这是一些信息。
https://docs.microsoft.com/en-us/sql/t-sql/statements/set-fmtonly-transact-sql?view=sql-server-2017
我正在研究SSRS 2016和新的报表生成器。
答案 1 :(得分:1)
因此经过一些研究后我发现使用在一个数据集中创建的#temp表不能在另一个数据集中使用。并且使用##表也不是一种方法,因为当人们试图在同一时间或几乎同时运行此报告时,这会导致各种问题。
我终于能够通过使用存储过程将我将要在其他数据集中使用的数据写入临时表并在每次运行之前截断表(" TRUNCATE TABLE&# 34)。这将允许您根据需要应用索引和其他性能修改。
在第一个数据集中执行存储过程。您的数据将填充在临时表中,然后您可以从其他数据集中调用它。
我希望这可以帮助那些试图在其他数据集中使用临时表的人。简单的答案是不可能的。
答案 2 :(得分:0)
我和你的问题一样,我把这些代码行放在我的存储过程的开头:
IF 1=0 BEGIN
SET FMTONLY OFF
END
实际上该声明永远不会执行,但它只是一种解决方案。
我希望它有所帮助。