使用标志组合多个不相关的选择语句

时间:2014-04-23 05:57:18

标签: sql sql-server select flags

我的Select语句可以单独运行。但是,我可以使用一个stored procedure而不是多个程序吗?

ALTER PROCEDURE [dbo].[zPrintAll]
@PrintVariable varchar(10),
@SuppliedKey      varchar(15)
AS
BEGIN
    IF(@PrintVariable='ONE')
        BEGIN
            SELECT  *
            FROM  Table1 INNER JOIN Table2 ON Table1.key=Table2.key
            WHERE   Table2.key='@SuppliedKey'
        END
    IF(@PrintVariable='TWO')
        BEGIN
            SELECT  *
            FROM  Table3 INNER JOIN Table4 ON Table3.key=Table4.key
            WHERE   Table3.key='@SuppliedKey'
        END

END

编辑:这是一个详细的打印功能。当我提供PersonID时,我会进入每个部门并在该部门打印他们的账单。我将打印一个至少包含20个部门的主要法案。 如果“我的打印”变量显示“衣服”,我会打印“服装部门”中的必填字段'对于PID。如果“我的打印”变量显示“鞋子”,我会从“鞋子”部门打印所需的字段'对于PID等。 我已经有了大量的程序,并且不想在那里添加另一堆Select语句。

我已针对“更新”的程序执行了此操作。或者'删除'基于旗帜,但它似乎没有在这里工作。

2 个答案:

答案 0 :(得分:0)

ALTER PROCEDURE [dbo].[zPrintAll]
@PrintVariable varchar(10),
@SuppliedKey      varchar(15)
AS
BEGIN

    BEGIN
        SELECT  * 
        FROM  Table1 INNER JOIN Table2 ON Table1.key=Table2.key

        UNION ALL
        SELECT  *
        FROM  Table3 INNER JOIN Table4 ON Table3.key=Table4.key

        WHERE @SuppliedKey = CASE WHEN @PrintVariable='ONE' THEN Table2.key
         WHEN @PrintVariable='TWO' THEN Table3.key ELSE '' END 
    END

END

答案 1 :(得分:0)

查询没有任何问题,但是当我用变量替换静态键时,语法错误。

ALTER PROCEDURE [dbo].[zPrintAll]
@PrintVariable varchar(10),
@SuppliedKey      varchar(15)
AS
BEGIN
    IF(@PrintVariable='ONE')
        BEGIN
            SELECT  *
            FROM  Table1 INNER JOIN Table2 ON Table1.key=Table2.key
            WHERE   Table2.key=@SuppliedKey
        END
    IF(@PrintVariable='TWO')
        BEGIN
            SELECT  *
            FROM  Table3 INNER JOIN Table4 ON Table3.key=Table4.key
            WHERE   Table3.key=@SuppliedKey
        END
END

因此, @SuppliedKey 而不是 '@SuppliedKey'