2013-08-30 11 views
20

CREATE OR REPLACE VIEW SQL सर्वर में काम नहीं करता प्रतीत होता है। तो मैं एसक्यूएल सर्वर पर काम करने के लिए CREATE OR REPLACE VIEW पोर्ट कैसे करूँ?SQL सर्वर में कार्य को देखने या स्थानांतरित करने के लिए कैसे करें?

CREATE OR REPLACE VIEW data_VVVV AS 
SELECT 
    VCV.xxxx, 
     VCV.yyyy AS yyyy, 
     VCV.zzzz AS zzzz 
FROM 
TABLE_A 
; 

कोई भी विचार:

यह मैं क्या करने की कोशिश कर रहा हूँ है?

उत्तर

10

संपादित करें: हालांकि इस सवाल चिह्नित किया गया है एक डुप्लिकेट के रूप में, यह अभी भी ध्यान दे रहा है। @JaKXz द्वारा प्रदान किया गया उत्तर सही है और स्वीकार्य उत्तर होना चाहिए।


आपको दृश्य के अस्तित्व की जांच करनी होगी। फिर परिणाम के आधार पर CREATE VIEW या ALTER VIEW करें।

IF (NOT EXISTS (SELECT 1 FROM sys.views WHERE name = 'data_VVV')) 
BEGIN 
    EXECUTE('CREATE VIEW data_VVVV as SELECT 1 as t'); 
END; 

ALTER VIEW data_VVVV AS 
    SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A ; 

दृश्य के अस्तित्व के लिए पहले चेक (वहाँ यह करने के लिए अन्य तरीके हैं:

IF OBJECT_ID('dbo.data_VVVV') IS NULL 
BEGIN 
    CREATE VIEW dbo.data_VVVV 
    AS 
    SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A VCV 
END 
ELSE 
    ALTER VIEW dbo.data_VVVV 
    AS 
    SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A VCV 
BEGIN 
END 
+1

यह आपको अपने चयन कथन को दोहराने का कारण बनता है ताकि आप वास्तव में उस कोड की मात्रा को दोगुना कर सकें जिसके बारे में आपको सोचना है। JaKXz उत्तर नीचे एक बेहतर दृष्टिकोण – JustEngland

+22

यह SQL सर्वर में काम नहीं करता है। 'व्यू बनाएं' बैच में सबसे पहले होना चाहिए और इसे 'IF' के अंदर डालने का प्रयास करते समय, मुझे' VIEW 'कीवर्ड के पास गलत वाक्यविन्यास मिलता है। – trailmax

+0

आपको CREATE कथन को EXEC (' आपका निर्माण कथन 'में लपेटना होगा)। अन्यथा यह आईएफ में काम नहीं करेगा। –

-1

SQL में एक दृश्य बनाने के लिए, निम्न सिंटैक्स है:

CREATE VIEW view_name AS 

और देखने वाक्य रचना को बदलने के लिए है:

ALTER VIEW view_name as 
+0

प्रश्न का उत्तर नहीं देता है (दोनों के लिए एकल आदेश)। –

-1
IF NOT EXISTS(select * FROM sys.views where name = 'data_VVVV ') 
    BEGIN 
     CREATE VIEW data_VVVV AS 
     SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A VCV 
    END 
ELSE 
    BEGIN 
     ALTER VIEW data_VVVV AS 
     SELECT VCV.xxxx, VCV.yyyy AS yyyy, VCV.zzzz AS zzzz FROM TABLE_A VCV 
    END 
+1

इसके अलावा, वीसीवी उपनाम कहीं भी सेट नहीं है। –

+0

@ mr.Reband गुड प्वाइंट –

+0

SQL सर्वर में काम नहीं करता है। एसएसएमएस में उस क्वेरी को कॉपी और पेस्ट करें, निष्पादन (या पार्स) बटन दबाएं और मुझे बताएं कि आपको क्या मिलता है। – clamum

24

यहाँ एक और तरीका है, जहां आप देखने की सामग्री को नकल करने की जरूरत नहीं है है)। यदि यह अस्तित्व में नहीं है, तो इसे सरल और गूंगा कुछ बनाओ। यदि ऐसा होता है, तो बस alter view कथन पर जाएं।

+2

यह काम नहीं प्रतीत होता है। एसक्यूएल सर्वर शिकायत कर रहा है कि दृश्य बनाएं बयान के बैच में पहली पंक्ति होनी चाहिए। नीचे दिया गया जवाब पहले दृश्यों को छोड़ देता है। –

44

@ खान के जवाब से उधार, मुझे क्या करना होगा:

IF OBJECT_ID('dbo.test_abc_def', 'V') IS NOT NULL 
    DROP VIEW dbo.test_abc_def 
GO 

CREATE VIEW dbo.test_abc_def AS 
SELECT 
    VCV.xxxx 
    ,VCV.yyyy AS yyyy 
    ,VCV.zzzz AS zzzz 
FROM TABLE_A 

MSDN Reference

+1

ओरेकल में, "बनाएं या प्रतिस्थापित करें" परमाणु है, इसलिए कोई डाउनटाइम नहीं है और आप बिना किसी समस्या के दृश्य को अपडेट कर सकते हैं, जबकि कोई एप्लिकेशन दृश्य पूछना चाहता है। –

+4

'डीआरओपी 'और निम्नलिखित' CREATE' मेटा डेटा छोड़ देंगे, जैसे कि अधिकार दिए गए अधिकार। एक SQL सर्वर में जहां आप SA नहीं हैं, यह बहुत खराब हो सकता है ... – Shnugo

4

कैसे कुछ इस तरह के बारे में, टिप्पणियों को स्पष्ट करना चाहिए:

--DJ - 2015-07-15 Example for view CREATE or REPLACE 

--Replace with schema and view names 
DECLARE @viewName NVARCHAR(30)= 'T'; 
DECLARE @schemaName NVARCHAR(30)= 'dbo'; 

--Leave this section as-is 
BEGIN TRY 
    DECLARE @view AS NVARCHAR(100) = ' 
CREATE VIEW ' + @schemaName + '.' + @viewName + ' AS SELECT '''' AS [1]'; 
    EXEC sp_executesql 
     @view; 
END TRY 
BEGIN CATCH 
    PRINT 'View already exists'; 
END CATCH; 
GO 

--Put full select statement here after modifying the view & schema name appropriately 
ALTER VIEW [dbo].[T] 
AS 
    SELECT '' AS [2]; 
GO 


--Verify results with select statement against the view 
SELECT * 
FROM [T]; 

चीयर्स -DJ

8

स्वीकार किए गए समाधान में नी के साथ कोई समस्या है डी एक ही कथन को दो बार बनाए रखने के लिए, यह बहुत ही कुशल नहीं है (हालांकि यह काम करता है)। सिद्धांत रूप में गॉर्डन लिनॉफ का समाधान जाना होगा, सिवाय इसके कि यह एमएसएसएलएल में काम नहीं करता है क्योंकि दृश्य को बैच में पहली पंक्ति होना चाहिए।

ड्रॉप/निर्माण इस प्रश्न का उत्तर नहीं देता है। मूल प्रश्न के अनुसार नौकरी निम्नलिखित है।

if not exists (select * from sysobjects where name='TABLE_A' and xtype='V') 
exec ('create view SELECT 
VCV.xxxx, 
    VCV.yyyy AS yyyy, 
    VCV.zzzz AS zzzz 
FROM TABLE_A') 
+0

यह सही तरीके से काम करता है और स्पष्टीकरण ने स्वीकार्य उत्तर दृष्टिकोण का उपयोग करने के दौरान त्रुटि संदेशों को क्यों प्राप्त किया। – trailmax

+0

यहां तक ​​कि बेहतर हो सकता है (गैर-अस्तित्व के मामले में) केवल एक 'चयन 1 एएस डमी' के साथ एक दृश्य और "वास्तविक" दृश्य परिभाषा को 'ALTER' के साथ 'जाओ' के बाद अनुवर्ती करें ... – Shnugo

14

एसक्यूएल सर्वर 2016 उत्तर

एसक्यूएल सर्वर 2016 के साथ अब आप (MSDN Source) कर सकते हैं:

DROP VIEW IF EXISTS dbo.MyView 
0

एक दृश्य फेरबदल देखने को छोड़ने और पुनः बनाने के द्वारा पूरा किया जा सकता है। अपने दृश्य को छोड़ने और फिर से बनाने के लिए निम्न का उपयोग करें।

IF EXISTS 
(SELECT NAME FROM SYS.VIEWS WHERE NAME = 'dbo.test_abc_def') 
DROP VIEW dbo.test_abc_def) go 

CREATE VIEW dbo.test_abc_def AS 
SELECT 
    VCV.xxxx, 
    VCV.yyyy AS yyyy 
    ,VCV.zzzz AS zzzz 
FROM TABLE_A 
संबंधित मुद्दे

 संबंधित मुद्दे