我是SQL Server 2008编程的新手,并尝试创建一个过程。
嗯,要求是'过程根据输入参数返回数据或者如果没有给出输入数据 - 它应该进行默认选择并返回所有符合条件的数据'
我试着用这样的东西 -
CREATE PROCEDURE [dbo].[Proc_sampletestproc]
(@testid int)
AS
BEGIN
SET NOCOUNT OFF; ----I worked with Oracle PL/SQL and so do we need for mandatory this declarations
在这里,我需要检查输入testid
是否有值。如果它存在,我们有一个选择的情况或我们做默认选择。
另外,我正在放置一个直接SELECT
没有连接表。我如何JOIN
表格以及OUTER JOINS
,因为testid
可能有也可能没有保险?我的意思是语法 - SQL Server中的语法完全不同。
SELECT
T.TESTID, T.NAME, TI.INSURENAME
FROM
testinsured ti, test t, testinsuredHistory tih
WHERE
t.testid = ti.testid -----This entry may be there or not IN THE testinsured TABLE
AND tih.testinsuredid = ti.testinsuredid --A testid might have 2 Insurers whose history is stored here.
AND TIH.STARTDATE IS NOT NULL
AND TIH.ENDDATE IS NOT NULL --TO CHECK ACTIVE DATES FOR COVERAGE
此外,我想在testid
上进行分组,以便名称出现一次,但InsuredPlanname
相应地出现一次,是每个Testid
的两倍。
答案 0 :(得分:0)
if (@testid is not null)
begin
/* ... */
end
else
begin
SELECT T.TESTID,T.NAME,TI.INSURENAME
FROM test t
left outer join testinsured ti on t.testid = ti.testid -----This entry may be there or not IN THE testinsured TABLE
left outer join testinsuredHistory tih on ti.testinsuredid = tih.testinsuredid --A testid might have 2 Insurers whose history is stored here.
where TIH.STARTDATE IS NOT null AND TIH.ENDDATE IS NOT NULL
/* group by ... */
end