我有一个非常简单的存储过程,基本上是基于单个表的视图的SELECT
语句。
当我单独运行SELECT
语句时,我得到一组结果,当我运行存储过程时,我得到一个不同的(实际上是第一个的子集)。
这是使用SQL Server 2008 Management Studio。
有没有人知道如何发生这种情况?
我尝试重新编译存储过程并删除并重新创建它,并且值不会改变。
基础表实际上是SYNONYM
到不同数据库中但在同一服务器上的表。
CREATE PROCEDURE [dbo].[usp_RPT_SelectCostCentre2]
(@DataAreaId nvarchar(3))
AS
BEGIN
SELECT
'All' AS 'NUM',
' All Cost Centres' AS 'Description'
UNION
SELECT DISTINCT
d.NUM,
CASE
WHEN d.DESCRIPTION='' THEN d.NUM
ELSE d.DESCRIPTION
END AS 'Description'
FROM
v_BAS2_Dimensions AS d
WHERE
d.DataAreaId = @DataAreaId
AND d.DIMENSIONCODE=1
ORDER BY
NUM
END
单个SQL语句运行以测试:
@DataAreaId nvarchar(4)
--
SET @DataAreaID='bkt2'
SELECT 'All' AS 'NUM'
,' All Cost Centres' AS 'Description'
UNION
SELECT DISTINCT d.NUM
,CASE
WHEN d.DESCRIPTION='' THEN d.NUM
ELSE d.DESCRIPTION
END AS 'Description'
FROM v_BAS2_Dimensions AS d
WHERE d.DataAreaId=@DataAreaId
AND d.DIMENSIONCODE=1
ORDER BY NUM
答案 0 :(得分:1)
你跑
DECLARE @DataAreaId nvarchar(4)
在SP中:
@DataAreaId nvarchar(3)
只需修复SP nvarchar(4)
或甚至使用nvarchar(max)