我想让sp使用条件参数,例如
var bmp = BitmapSource.Create(img.PixelWidth, img.PixelHeight, DPI, DPI, PixelFormats.Rgb24, img.Palette, destPixelData, img.PixelWidth/24);
我知道这是非常通用的,但是此过程有效。我试图做的是将条件“放在中间”,例如。
CREATE PROCEDURE spTest
(
@param1 DATE,
@param2 DATE,
@param3 NVARCHAR(8) = null
)
AS
IF (@param3 = 'test1')
BEGIN
SELECT a, SUM(b) AS SumOfB, SUM(c) AS SumOfC FROM db1 GROUP BY a
END
WITH innerQuery1 AS
(
SELECT a, b, c FROM db2 WHERE a >=@param1 AND a <= @param2
)
SELECT a, SUM(b) AS SumOfB, SUM(c) AS SumOfC FROM innerQuery1 GROUP BY a
现在发生的事情是它不再可以看到innerQuery1。您可以在WITH中没有条件吗?
关于它为什么不起作用的任何想法?我的实际查询更长,嵌套查询更多。在这种情况下,基本上是尝试只使用一个sp,然后使用基于参数的查询结果。
谢谢
答案 0 :(得分:1)
尝试将您的过程创建为:
CREATE PROCEDURE spTest
(
@param1 DATE,
@param2 DATE,
@param3 NVARCHAR(8) = null
)
AS
IF (@param3 = 'test1')
BEGIN
SELECT a, SUM(b) AS SumOfB, SUM(c) AS SumOfC FROM db1 GROUP BY a
END
ELSE
BEGIN
WITH innerQuery1 AS
(
SELECT a, b, c FROM db2 WHERE a >=@param1 AND a <= @param2
)
SELECT a, SUM(b) AS SumOfB, SUM(c) AS SumOfC FROM innerQuery1 GROUP BY a;
END
GO
答案 1 :(得分:1)
如果我理解您的意图,那么您可能需要考虑一些其他方法,例如将测试用例拆分为单独的SP并与它们组成测试套件:
CREATE PROC TestSuite_CheckAggregations
@arg,
@param1, @param2
as
...
SET @testCase = CASE @arg
WHEN '1' THEN 'TestCase_1_innerQuery'
WHEN '2' THEN `TestCase_2_DirectQuery`
END
...
EXEC @testCase
@param1, @param2
...
END
CREATE PROC TestCase_1_innerQuery
...
CREATE PROC TestCase_2_DirectQuery
...
在自然支持此类事物的语言/框架上构建测试系统可能会更有用。