我一直在研究一个脚本,它将交换两个ID作为主键:
CREATE PROCEDURE dbo.ID
@OldName NVARCHAR(128),
@NewName NVARCHAR(128)
AS
DECLARE @NewId INT, @OldId INT
CREATE TABLE TmpTable (ID INT, Name NVARCHAR(128))
INSERT INTO TmpTable (Name,ID)
VALUES (@NewName, (SELECT ID FROM Table1 WHERE [Name] = @NewName));
INSERT INTO TmpTable (Name,ID)
VALUES(@OldName, (SELECT ID FROM Table1 WHERE [Name] = @OldName))
UPDATE Table1
SET ID = (SELECT MAX(ID) + 1000 FROM Table1)
WHERE [NAME] = @NewName
UPDATE Table1
SET ID = (SELECT MAX(ID) + 2000 FROM Table1)
WHERE [NAME] = @OldName
UPDATE Table1
SET ID = (SELECT ID FROM TmpTable WHERE Name = @NewName)
WHERE [Name] = @OldName
UPDATE Table1
SET ID = (SELECT ID FROM TmpTable WHERE Name = @OldName)
WHERE [Name] = @NewName
DROP TABLE TmpTable
go
我现在要做的是在报告服务中将其作为报告运行,其中将从查询Table1表的下拉框中选择NewNAme和OldNAme。目前,当我尝试导入此代码时,它会询问值。
答案 0 :(得分:1)
当您向报表数据源添加存储过程时,ssrs会自动将其参数添加到report ass report参数。
如果要通过下拉列表指定参数,则必须编写类似Web应用程序的应用程序并将此参数传递给报表。
答案 1 :(得分:0)
我一直在使用报告向导,使用文本导入存储过程,如
exec ID 1,2
这得到了tablix的基本返回值。但是在您的情况下不适用,因为没有选择返回。
向导创建报告后,右键单击数据集并选择存储过程。单击“刷新字段”,将自动添加参数。
要使报表参数成为下拉列表,您需要为它们提供数据源。我添加了一个基于select语句或另一个存储过程的新数据集来选择我需要的值。
右键单击参数并选择参数属性 您现在可以跳转到可用值选项卡并选择"从查询中获取值" 选择提供下拉值的数据集。
还有其他选项,例如允许空值等,可以微调下拉的工作方式。
非常好奇为什么您需要一个运行您显示的SQL的报表而不返回任何值。似乎有更好的方法可以让用户有能力运行这样的东西。