Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 关键字';视图';_Sql Server_Sql Server 2005 - Fatal编程技术网

Sql server 关键字';视图';

Sql server 关键字';视图';,sql-server,sql-server-2005,Sql Server,Sql Server 2005,当我运行下面的writend过程时,我得到下面的错误。这有什么问题 错误: CREATE PROCEDURE tbv21Setup AS BEGIN EXEC sp_executesql N' IF EXISTS( SELECT 1 FROM dbo.sysobjects WHERE id = OBJECT_ID(''dbo.Cust_Address_View'') ) DROP VIEW dbo.Cust_Add

当我运行下面的writend过程时,我得到下面的错误。这有什么问题

错误:

CREATE PROCEDURE tbv21Setup

AS
BEGIN

    EXEC sp_executesql N'

    IF EXISTS(
        SELECT 1 
        FROM dbo.sysobjects 
        WHERE id = OBJECT_ID(''dbo.Cust_Address_View'')
    ) DROP VIEW dbo.Cust_Address_View;

    CREATE VIEW dbo.Cust_Address_View AS
        SELECT customer.individual_id   individual_id,
          customer.tb_customer_id   customer_id,
          customer.customer_category_lkp    customer_category_lkp,
          ADDRESS.postal_code   postal_code
        FROM CUSTOMER
        INNER JOIN INDIVIDUAL
        ON (CUSTOMER.individual_id = INDIVIDUAL.individual_id)
        JOIN
          (SELECT address_id ,
            a.individual_id ,
            postal_code ,
            obsolete_flag ,
            tb_modified_date
          FROM address a
          INNER JOIN
            (SELECT individual_id,
              MAX(ISNULL((tb_modified_date),(''01/01/1900''))) AS max_tb_modified_date
            FROM ADDRESS
            WHERE obsolete_flag = 0
            GROUP BY individual_id
            ) AS xa
          ON (xa.individual_id                   = a.individual_id
          AND xa.max_tb_modified_date            = ISNULL((a.tb_modified_date),(''01/01/1900'')))
          WHERE a.obsolete_flag                  = 0
          ) AS ADDRESS ON (ADDRESS.individual_id = INDIVIDUAL.individual_id)
        AND customer.customer_category_lkp       =
          (SELECT lookup_id
          FROM lookup
          WHERE lookup_category_name = ''customer_category''
          AND code_string            =''prospect''
          )
        AND customer.obsolete_flag   =0
        AND ADDRESS.postal_code NOT IN (''UNKNOWN'',''unknown'',''U'',''u'','' '','''');'

EXEC sp_executesql N'

    ALTER TABLE dbo.tb_customer_attribute 
    ADD  tb_customer_attribute_id UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
                obsolete_flag int,
                revision_number INT;

    IF EXISTS(
        SELECT 1 
        FROM dbo.sysobjects 
        WHERE id = OBJECT_ID(''dbo.tb_comm_hist_xfer'')
    ) DROP TABLE dbo.tb_comm_hist_xfer;

    CREATE TABLE dbo.tb_comm_hist_xfer (
        tb_comm_hist_xfer_id binary(16) NOT NULL,
        tb_old_customer_id int NOT NULL,
        tb_customer_id int NULL,
        date_entered datetime NOT NULL
    );

    IF EXISTS(
        SELECT 1 
        FROM dbo.sysobjects 
        WHERE id = OBJECT_ID(''dbo.TBLogger'')
    ) DROP TABLE dbo.TBLogger;

    CREATE TABLE dbo.TBLogger (logDate DATETIME, logSQL VARCHAR(MAX), logRows INT, errKode INT);

    IF EXISTS(
        SELECT 1 
        FROM dbo.sysobjects 
        WHERE id = OBJECT_ID(''dbo.crb_parameter'')
    ) DROP TABLE dbo.crb_parameter;

    CREATE TABLE dbo.crb_parameter (stgdb_prefix VARCHAR(255));

    INSERT INTO dbo.crb_parameter VALUES (''tommydev1.dbo'');'

END
Msg 156,15级,状态1,程序TBV21设置,第11行不正确 关键字“视图”附近的语法

**


不能在过程内部创建视图

因此,您可以先单独创建一个视图,如下所示:

CREATE VIEW Cust_Address_View AS
        SELECT customer.individual_id   individual_id,
          customer.tb_customer_id   customer_id,
          customer.customer_category_lkp    customer_category_lkp,
          ADDRESS.postal_code   postal_code
        FROM CUSTOMER
        INNER JOIN INDIVIDUAL
        ON (CUSTOMER.individual_id = INDIVIDUAL.individual_id)
        JOIN
          (SELECT address_id ,
            a.individual_id ,
            postal_code ,
            obsolete_flag ,
            tb_modified_date
          FROM address a
          INNER JOIN
            (SELECT individual_id,
              MAX(ISNULL((tb_modified_date),('01/01/1900'))) AS max_tb_modified_date
            FROM ADDRESS
            WHERE obsolete_flag = 0
            GROUP BY individual_id
            ) AS xa
          ON (xa.individual_id                   = a.individual_id
          AND xa.max_tb_modified_date            = ISNULL((a.tb_modified_date),('01/01/1900')))
          WHERE a.obsolete_flag                  = 0
          ) AS ADDRESS ON (ADDRESS.individual_id = INDIVIDUAL.individual_id)
        AND customer.customer_category_lkp       =
          (SELECT lookup_id
          FROM lookup
          WHERE lookup_category_name = 'customer_category'
          AND code_string            ='prospect'
          )
        AND customer.obsolete_flag   =0
        AND ADDRESS.postal_code NOT IN ('UNKNOWN','unknown','U','u',' ','');
然后根据您的要求在程序中使用此视图

或使用动态SQL:

CREATE PROCEDURE tbv21Setup

AS
BEGIN

    EXEC sp_executesql N'

    CREATE VIEW Cust_Address_View AS
        SELECT customer.individual_id   individual_id,
          customer.tb_customer_id   customer_id,
          customer.customer_category_lkp    customer_category_lkp,
          ADDRESS.postal_code   postal_code
        FROM CUSTOMER
        INNER JOIN INDIVIDUAL
        ON (CUSTOMER.individual_id = INDIVIDUAL.individual_id)
        JOIN
          (SELECT address_id ,
            a.individual_id ,
            postal_code ,
            obsolete_flag ,
            tb_modified_date
          FROM address a
          INNER JOIN
            (SELECT individual_id,
              MAX(ISNULL((tb_modified_date),(''01/01/1900''))) AS max_tb_modified_date
            FROM ADDRESS
            WHERE obsolete_flag = 0
            GROUP BY individual_id
            ) AS xa
          ON (xa.individual_id                   = a.individual_id
          AND xa.max_tb_modified_date            = ISNULL((a.tb_modified_date),(''01/01/1900'')))
          WHERE a.obsolete_flag                  = 0
          ) AS ADDRESS ON (ADDRESS.individual_id = INDIVIDUAL.individual_id)
        AND customer.customer_category_lkp       =
          (SELECT lookup_id
          FROM lookup
          WHERE lookup_category_name = ''customer_category''
          AND code_string            =''prospect''
          )
        AND customer.obsolete_flag   =0
        AND ADDRESS.postal_code NOT IN (''UNKNOWN'',''unknown'',''U'',''u'','' '','''');'

IF EXISTS(select * from sys.objects where name='Cust_Address_View')
drop view Cust_Address_View 
EXEC sp_executesql N'

    ALTER TABLE tb_customer_attribute 
    ADD  tb_customer_attribute_id UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
                obsolete_flag int,
                revision_number int;

    CREATE TABLE tb_comm_hist_xfer (
        tb_comm_hist_xfer_id binary(16) NOT NULL,
        tb_old_customer_id int NOT NULL,
        tb_customer_id int NULL,
        date_entered datetime NOT NULL
    );

    CREATE TABLE TBLogger (logDate DATETIME, logSQL VARCHAR(MAX), logRows INT, errKode INT);

    CREATE TABLE crb_parameter (stgdb_prefix VARCHAR(255));

    INSERT INTO crb_parameter VALUES (''tommydev1.dbo'');'


END

无法在sp内创建DDL,只能批量创建。否则请尝试动态SQL-

CREATE PROCEDURE tbv21Setup

AS
BEGIN

    EXEC sp_executesql N'

    CREATE VIEW Cust_Address_View AS
        SELECT customer.individual_id   individual_id,
          customer.tb_customer_id   customer_id,
          customer.customer_category_lkp    customer_category_lkp,
          ADDRESS.postal_code   postal_code
        FROM CUSTOMER
        INNER JOIN INDIVIDUAL
        ON (CUSTOMER.individual_id = INDIVIDUAL.individual_id)
        JOIN
          (SELECT address_id ,
            a.individual_id ,
            postal_code ,
            obsolete_flag ,
            tb_modified_date
          FROM address a
          INNER JOIN
            (SELECT individual_id,
              MAX(ISNULL((tb_modified_date),(''01/01/1900''))) AS max_tb_modified_date
            FROM ADDRESS
            WHERE obsolete_flag = 0
            GROUP BY individual_id
            ) AS xa
          ON (xa.individual_id                   = a.individual_id
          AND xa.max_tb_modified_date            = ISNULL((a.tb_modified_date),(''01/01/1900'')))
          WHERE a.obsolete_flag                  = 0
          ) AS ADDRESS ON (ADDRESS.individual_id = INDIVIDUAL.individual_id)
        AND customer.customer_category_lkp       =
          (SELECT lookup_id
          FROM lookup
          WHERE lookup_category_name = ''customer_category''
          AND code_string            =''prospect''
          )
        AND customer.obsolete_flag   =0
        AND ADDRESS.postal_code NOT IN (''UNKNOWN'',''unknown'',''U'',''u'','' '','''');'

EXEC sp_executesql N'

    ALTER TABLE tb_customer_attribute 
    ADD  tb_customer_attribute_id UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
                obsolete_flag int,
                revision_number int;

    CREATE TABLE tb_comm_hist_xfer (
        tb_comm_hist_xfer_id binary(16) NOT NULL,
        tb_old_customer_id int NOT NULL,
        tb_customer_id int NULL,
        date_entered datetime NOT NULL
    );

    CREATE TABLE TBLogger (logDate DATETIME, logSQL VARCHAR(MAX), logRows INT, errKode INT);

    CREATE TABLE crb_parameter (stgdb_prefix VARCHAR(255));

    INSERT INTO crb_parameter VALUES (''tommydev1.dbo'');'


END
更新:

CREATE PROCEDURE tbv21Setup

AS
BEGIN

    EXEC sp_executesql N'

    IF EXISTS(
        SELECT 1 
        FROM dbo.sysobjects 
        WHERE id = OBJECT_ID(''dbo.Cust_Address_View'')
    ) DROP VIEW dbo.Cust_Address_View;

    CREATE VIEW dbo.Cust_Address_View AS
        SELECT customer.individual_id   individual_id,
          customer.tb_customer_id   customer_id,
          customer.customer_category_lkp    customer_category_lkp,
          ADDRESS.postal_code   postal_code
        FROM CUSTOMER
        INNER JOIN INDIVIDUAL
        ON (CUSTOMER.individual_id = INDIVIDUAL.individual_id)
        JOIN
          (SELECT address_id ,
            a.individual_id ,
            postal_code ,
            obsolete_flag ,
            tb_modified_date
          FROM address a
          INNER JOIN
            (SELECT individual_id,
              MAX(ISNULL((tb_modified_date),(''01/01/1900''))) AS max_tb_modified_date
            FROM ADDRESS
            WHERE obsolete_flag = 0
            GROUP BY individual_id
            ) AS xa
          ON (xa.individual_id                   = a.individual_id
          AND xa.max_tb_modified_date            = ISNULL((a.tb_modified_date),(''01/01/1900'')))
          WHERE a.obsolete_flag                  = 0
          ) AS ADDRESS ON (ADDRESS.individual_id = INDIVIDUAL.individual_id)
        AND customer.customer_category_lkp       =
          (SELECT lookup_id
          FROM lookup
          WHERE lookup_category_name = ''customer_category''
          AND code_string            =''prospect''
          )
        AND customer.obsolete_flag   =0
        AND ADDRESS.postal_code NOT IN (''UNKNOWN'',''unknown'',''U'',''u'','' '','''');'

EXEC sp_executesql N'

    ALTER TABLE dbo.tb_customer_attribute 
    ADD  tb_customer_attribute_id UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY,
                obsolete_flag int,
                revision_number INT;

    IF EXISTS(
        SELECT 1 
        FROM dbo.sysobjects 
        WHERE id = OBJECT_ID(''dbo.tb_comm_hist_xfer'')
    ) DROP TABLE dbo.tb_comm_hist_xfer;

    CREATE TABLE dbo.tb_comm_hist_xfer (
        tb_comm_hist_xfer_id binary(16) NOT NULL,
        tb_old_customer_id int NOT NULL,
        tb_customer_id int NULL,
        date_entered datetime NOT NULL
    );

    IF EXISTS(
        SELECT 1 
        FROM dbo.sysobjects 
        WHERE id = OBJECT_ID(''dbo.TBLogger'')
    ) DROP TABLE dbo.TBLogger;

    CREATE TABLE dbo.TBLogger (logDate DATETIME, logSQL VARCHAR(MAX), logRows INT, errKode INT);

    IF EXISTS(
        SELECT 1 
        FROM dbo.sysobjects 
        WHERE id = OBJECT_ID(''dbo.crb_parameter'')
    ) DROP TABLE dbo.crb_parameter;

    CREATE TABLE dbo.crb_parameter (stgdb_prefix VARCHAR(255));

    INSERT INTO dbo.crb_parameter VALUES (''tommydev1.dbo'');'

END

提示:直接创建视图,而不是使用存储过程


可以使用
动态查询创建它。无论如何,使用动态查询是一个糟糕的主意,但不像这里创建的。请参阅“每天学习”。刚刚被这一个ping了一下,谢谢你已经提出了这个问题。@Devart--你需要添加if exists下拉视图,然后创建它。因为当用户多次调用此存储过程时,它将抛出错误,因为视图已存在。这是我的荣幸@AnandPhadke。