Я пытаюсь создать представление в SQL Server 2000 с помощью корпоративных менеджеров - PullRequest
0 голосов
/ 28 июня 2011

Я пытаюсь создать View в SQL Server 2000 с помощью Enterprise Manager, который иногда не возвращает никаких строк, а когда нет, мне нужно вернуть 0. Я пробовал это, но продолжаю получать этосообщение при попытке сохранить его:

Конструктор запросов не поддерживает конструкцию IF SQL.

IF EXISTS (SELECT     dbo.oehdrhst_sql.cus_no, dbo.oehdrhst_sql.inv_dt, dbo.oehdrhst_sql.inv_no, dbo.OELINHST_SQL.item_no, 
                                          dbo.OELINHST_SQL.item_desc_1, dbo.OELINHST_SQL.item_desc_2, dbo.OELINHST_SQL.qty_to_ship, dbo.IMITMIDX_SQL.user_def_fld_1, 
                                          dbo.IMITMIDX_SQL.user_def_fld_2, dbo.IMITMIDX_SQL.user_def_fld_3, dbo.IMITMIDX_SQL.user_def_fld_4, 
                                          dbo.IMITMIDX_SQL.user_def_fld_5, dbo.oehdrhst_sql.ord_type, dbo.oehdrhst_sql.orig_ord_type, dbo.OELINHST_SQL.qty_return_to_stk, 
                                          dbo.OELINHST_SQL.qty_to_ship * dbo.IMITMIDX_SQL.user_def_fld_2 AS extended, CONVERT(datetime, STR(dbo.oehdrhst_sql.inv_dt, 8, 0)) 
                                          AS [Date]
                    FROM         dbo.oehdrhst_sql INNER JOIN
                                          dbo.OELINHST_SQL ON dbo.oehdrhst_sql.ord_no = dbo.OELINHST_SQL.ord_no INNER JOIN
                                          dbo.IMITMIDX_SQL ON dbo.OELINHST_SQL.item_no = dbo.IMITMIDX_SQL.item_no
                    WHERE     (dbo.oehdrhst_sql.inv_dt BETWEEN 20100701 AND 20110630) AND (dbo.OELINHST_SQL.item_no BETWEEN '3065 0' AND 
                                          '3065 ZZZZZZZZZZ') AND (NOT (dbo.IMITMIDX_SQL.user_def_fld_2 IS NULL)))
SELECT     EXTENDED, cus_no, inv_dt, inv_no, item_no, item_desc_1, item_desc_2, qty_to_ship, user_def_fld_1, user_def_fld_2, [date]
 FROM         (SELECT     dbo.oehdrhst_sql.cus_no, dbo.oehdrhst_sql.inv_dt, dbo.oehdrhst_sql.inv_no, dbo.OELINHST_SQL.item_no, 
                                               dbo.OELINHST_SQL.item_desc_1, dbo.OELINHST_SQL.item_desc_2, dbo.OELINHST_SQL.qty_to_ship, 
                                               dbo.IMITMIDX_SQL.user_def_fld_1, dbo.IMITMIDX_SQL.user_def_fld_2, dbo.IMITMIDX_SQL.user_def_fld_3, 
                                               dbo.IMITMIDX_SQL.user_def_fld_4, dbo.IMITMIDX_SQL.user_def_fld_5, dbo.oehdrhst_sql.ord_type, dbo.oehdrhst_sql.orig_ord_type, 
                                               dbo.OELINHST_SQL.qty_return_to_stk, dbo.OELINHST_SQL.qty_to_ship * dbo.IMITMIDX_SQL.user_def_fld_2 AS extended, 
                                               CONVERT(datetime, STR(dbo.oehdrhst_sql.inv_dt, 8, 0)) AS [Date]
                        FROM          dbo.oehdrhst_sql INNER JOIN
                                               dbo.OELINHST_SQL ON dbo.oehdrhst_sql.ord_no = dbo.OELINHST_SQL.ord_no INNER JOIN
                                               dbo.IMITMIDX_SQL ON dbo.OELINHST_SQL.item_no = dbo.IMITMIDX_SQL.item_no
                        WHERE      (dbo.oehdrhst_sql.inv_dt BETWEEN 20100701 AND 20110630) AND (dbo.OELINHST_SQL.item_no BETWEEN '3065 0' AND 
                                               '3065 ZZZZZZZZZZ') AND (NOT (dbo.IMITMIDX_SQL.user_def_fld_2 IS NULL))) a
 GROUP BY EXTENDED, cus_no, inv_dt, inv_no, item_no, item_desc_1, item_desc_2, qty_to_ship, user_def_fld_1, user_def_fld_2, [date] ELSE
                            SELECT     EXTENDED = 0

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

Это не то, что вы должны делать в представлении. Вместо этого сделайте это, когда ВЫЗЫВАЕТЕ представление, т.е.

IF (SELECT COUNT(*) FROM v_MyView) > 0
BEGIN
   SELECT * FROM v_MyView
END 
ELSE
SELECT 0
0 голосов
/ 28 июня 2011

Вы, вероятно, можете отбросить часть IF EXISTS и просто использовать ISNULL (EXTENDED, 0). Хотя это предполагает многое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...