Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将文本参数值传递给存储过程时,SSRS如何包装这些值?_Sql Server_Stored Procedures_Reporting Services - Fatal编程技术网

Sql server 将文本参数值传递给存储过程时,SSRS如何包装这些值?

Sql server 将文本参数值传递给存储过程时,SSRS如何包装这些值?,sql-server,stored-procedures,reporting-services,Sql Server,Stored Procedures,Reporting Services,我有一个用于填充报表数据集的存储过程。其中一个参数是存储过程定义中默认为Null的可为Null的varchar(10)。如果用户只想报告单个订单,而不是满足其他参数化条件的所有订单,则此参数允许用户指定订单号 订单号是整数,但它们存储在表中以前导零为前缀的varchar(10)字段中。(报告数据是从ERP系统导入的,该系统以这种方式存储整数订单号,因此我保持了相同的愚蠢格式!) 当参数设置为null时,我将获得我期望的所有行,无论是在SSMS中执行存储过程时,还是在SSRS中使用dataset的

我有一个用于填充报表数据集的存储过程。其中一个参数是存储过程定义中默认为Null的可为Null的varchar(10)。如果用户只想报告单个订单,而不是满足其他参数化条件的所有订单,则此参数允许用户指定订单号

订单号是整数,但它们存储在表中以前导零为前缀的varchar(10)字段中。(报告数据是从ERP系统导入的,该系统以这种方式存储整数订单号,因此我保持了相同的愚蠢格式!)

当参数设置为null时,我将获得我期望的所有行,无论是在SSMS中执行存储过程时,还是在SSRS中使用dataset的“Query…”上下文菜单选项时

但是,当我在SSRS查询设计器表单中指定订单号(用“单引号”包装,这样SSRS就不会截断前导零)并执行存储过程时,返回的行数为零。然而,当从SSMS执行存储过程并将参数设置为相同的值时,我得到了预期的正确行数

我有一种感觉,当解析提供到存储过程参数中的值时,SSRS在后台做了一些意想不到的事情,所以我的问题是如何指定包含整数的字符串,以便在查询设计器中获得与SSMS中相同的结果?单引号还是别的什么

我没有发布代码,因为我想知道是否有人立即意识到这个问题,而不是偏离主题,“你为什么这么做,为什么不这么做?”最佳实践爱好者,不能跳出框框思考,键入答案-p

然而,也就是说,如果没有人意识到这个问题,我将发布代码


平台:SQLServer2008R2,BIDS2008

问题在于单引号。我把它们放在“定义查询参数”“参数值”窗口中。我还对另外两个参数执行了此操作,其中一个参数在WHERE子句中的“LIKE”%parametervalue%”中使用,因此额外的引号不会影响查询结果

所以。。。。我将以不同的方式处理这个问题,但问题仍然是,如果有一个varchar字段,其中有一个带前导零的整数,如果不能使用单引号,如何在SSRS中指定一个值

我想这家伙也有同样的问题

我也有同样的怀疑,这就是为什么我要这个屏幕:)

SSRS知道参数是基于字符串的,因此不需要添加引号

假设查询参数键入正确,则不需要在任何地方使用引号(字符串前端不需要任何引号-显然,在查询中它们需要引号,否则将得到隐式转换)

如果要在后端用前导零填充int,可以使用REPLICATE()完成,也可以将int的字符串表示形式转换为int

e、 g.最多有10个填充零:

DECLARE @SomeNumericValue int
SET @SomeNumericValue = 10
SELECT RIGHT(REPLICATE('0', 10) + cast(@SomeNumericValue as varchar), 10)
结果:

0000000010
否则,您可以逃脱:

SELECT * FROM SomeTable WHERE SomeVarcharFieldWhichActuallyContainsPaddedInts = 10
这是因为SQL会隐式地将
00000000 10
转换为int-当然,如果表中表示了非数值,这可能会引发错误(并且无论结果如何,每次尝试此转换的查询都会引发错误,因为SQL将转换整个结果集以进行比较)

e、 g.尝试以下脚本:

-- This will work:
DECLARE @SomeTable Table(IntString varchar(50))

insert into @SomeTable
SELECT '000001'
UNION
SELECT '000002'
UNION
SELECT '000003'

SELECT * from @SomeTable where IntString = 1

-- This WILL return some results but it won't be happy...!

insert into @SomeTable
SELECT 'Hello'

SELECT * from @SomeTable where IntString = 1

没有看到这一点-因此您正在查询设计器中执行存储过程,并返回0行…在SSRS查询设计器窗体中运行存储过程之前,是否可以发布参数窗口的屏幕截图?Charleh。你无意中帮我解决了(我想)所以谢谢。。。