我的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
语句。
我已针对“更新”的程序执行了此操作。或者'删除'基于旗帜,但它似乎没有在这里工作。
答案 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'