我正在尝试重新创建用于测试特定应用程序方案的存储过程,但我没有足够的权限来查看原始存储过程。我可以看到应用程序运行如下查询:
exec dbo.SP_GET_WORKSTATIONS @WORKSTATION_FID=N'%',@VALID_IND=N'%',@WORKSTATION_DOMAIN=N'%',@WORKSTATION_PID=N'%'
根据原始存储过程的输入数据类型结果,返回结果我构建了一个这样的存储过程:
CREATE PROCEDURE [dbo].[SP_GET_WORKSTATIONS]
@WORKSTATION_FID varchar(32),
@VALID_IND char(1),
@WORKSTATION_DOMAIN char(20),
@WORKSTATION_PID varchar(10)
AS
SELECT
WORKSTATION_FID as Code,
VALID_IND as ValidInd,
WORKSTATION_DOMAIN As Name,
WORKSTATION_PID as PId
FROM
[dbo].[L_WORKSTATIONS]
WHERE
WORKSTATION_FID LIKE @WORKSTATION_FID AND
VALID_IND LIKE @VALID_IND AND
WORKSTATION_DOMAIN LIKE @WORKSTATION_DOMAIN AND
WORKSTATION_PID LIKE @WORKSTATION_PID;
GO
然而,如果我运行
,这不会返回任何数据SELECT
WORKSTATION_FID as Code,
VALID_IND as ValidInd,
WORKSTATION_DOMAIN As Name,
WORKSTATION_PID as PId
FROM
[dbo].[L_WORKSTATIONS]
WHERE
WORKSTATION_FID LIKE '%' AND
VALID_IND LIKE '%' AND
WORKSTATION_DOMAIN LIKE '%' AND
WORKSTATION_PID LIKE '%'
我得到了结果。如果我将存储过程中的LIKE更改为=并指定精确参数,则存储过程将起作用。
答案 0 :(得分:4)
您的@WORKSTATION_DOMAIN
参数应为varchar
而不是char
。
尾随空格在类似模式中很重要,%
后跟19个空格(填充到20个字符)将尝试匹配以19个空格结尾的内容。
在等式比较中忽略尾随空格。
答案 1 :(得分:0)
请注意,可能需要传入不同的参数,例如%,并且取决于您的proc可能无效的数据类型。原始文件很可能是使用动态SQL创建的,因此它可以处理值列表和不同的数据类型。