ওরাকলের ক্রিয়েট বা রিপ্লেস ভিউয়ের সমতুল্য এসকিউএল সার্ভার


115

ওরাকল-এ, আমি এখানে প্রদর্শিত হিসাবে একটি একক বিবৃতি দিয়ে একটি দৃশ্য পুনরায় তৈরি করতে পারি:

CREATE OR REPLACE VIEW MY_VIEW AS
SELECT SOME_FIELD
FROM SOME_TABLE
WHERE SOME_CONDITIONS

সিনট্যাক্সটি বোঝায়, এটি পুরানো দৃষ্টিভঙ্গি ফেলে দেবে এবং আমি যে কোনও সংজ্ঞা দিয়েছি তা দিয়ে এটি পুনরায় তৈরি করবে।

এমএসএসকিউএলে (এসকিউএল সার্ভার ২০০৫ বা তার পরে) এর সমতুল্য কি একই কাজ করবে?

উত্তর:


103

উপরের সমাধানগুলি যদিও তারা কাজটি পাবে তা ব্যবহারকারীর অনুমতি বাদ দেওয়ার ঝুঁকিতে এটি করে। আমি নীচে আমার মতামত বা সঞ্চিত পদ্ধতিগুলি তৈরি বা প্রতিস্থাপন করতে পছন্দ করি।

IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[vw_myView]'))
    EXEC sp_executesql N'CREATE VIEW [dbo].[vw_myView] AS SELECT ''This is a code stub which will be replaced by an Alter Statement'' as [code_stub]'
GO

ALTER VIEW [dbo].[vw_myView]
AS
SELECT 'This is a code which should be replaced by the real code for your view' as [real_code]
GO

2
আমি তখন "ড্রপ" থাকতাম (পুনরায়) "যুক্ত" ব্যক্তি। তবে এখন আমি এই ধরণের সমাধানের দিকে ঝুঁকছি (সেখানে না থাকলে যোগ করুন, তবে পরিবর্তন করুন)।
গ্রানাডা কোডার

একটি ভিউ বাদ দিন এবং এটি পুনরায় তৈরি করার চেয়ে ভাল way যদি আপনার দেখার জন্য প্রচুর বিদ্যমান ব্যবহারকারীদের সুরক্ষা সেটআপ থাকে, তবে আপনাকে সেগুলি পুনরায় তৈরি করতে হবে। এটি এই ইস্যুতে আমার পদ্ধতির।
jonas

আপনার ক্রিয়েট এবং অলটার বিভিন্ন কাজ করে .... কেন? (একজনের গতিশীল, অন্যটির নয়, এবং তাদের বিভিন্ন বার্তা রয়েছে))
জে সুলিভান

আমি আপনার বিভ্রান্ত বিবৃতিতে কীভাবে "পরিবর্তিত বিবৃতি দ্বারা প্রতিস্থাপন করা হয়" জড়িত তা বিভ্রান্তকর মনে করি - এর অর্থ কী? এখানে কী কোডটি আসলে প্রতিস্থাপন করা উচিত, বা কীভাবে তা আমার কাছেও পরিষ্কার নয়। আমি আপনার উত্তর দ্বারা বিভ্রান্ত কয়েকটি হতে হবে।
কাইল জুলি

2
এসকিউএল সার্ভার 2016 এসপি 1 + এর জন্য, ল্যাড 2025 এর উত্তর দেখুন।
এমবিওয়াইজ

45

ভিউটি বিদ্যমান কিনা তা পরীক্ষা করতে আপনি যদি 'উপস্থিত থাকে' ব্যবহার করতে পারেন এবং তা যদি হয় তবে ফেলে দিন drop

যদি উপস্থিত না থাকে (তথ্য নির্বাচন থেকে ট্যাবলেট নির্বাচন করুন। CHEMA.VIEWS
        যেখানে ট্যাবেল_NAME = 'মাইভিউ')
    ভিউ আমার ভিউ ড্রপ করুন
যাওয়া

আমার ভিউ তৈরি করুন
আঃ 
     ....
যাওয়া

13
এটির সাথে সমস্যাটি হ'ল আপনি যে কোনও অনুমতি হারাতে পারেন যা অবজেক্টটিতে পড়ে থাকতে পারে dropped
সাইমন

37

রেফারেন্সের জন্য SQL Server 2016 SP1+আপনি CREATE OR ALTER VIEWসিনট্যাক্স ব্যবহার করতে পারেন ।

এমএসডিএন তৈরি দেখুন :

CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]   
[ WITH <view_attribute> [ ,...n ] ]   
AS select_statement   
[ WITH CHECK OPTION ]   
[ ; ]

বা পরিবর্তন

শর্তসাপেক্ষে দৃশ্যটি ইতিমধ্যে বিদ্যমান থাকলেই পরিবর্তিত হয়।

ডিবি <> ফিডাল ডেমো


এটি একটি বাক্য গঠন। আপনি ORACLE তে যেমন করেন তেমন একই সময়ে আপনি তৈরি করুন এবং পরিবর্তিত কীওয়ার্ড উভয়ই ব্যবহার করতে পারবেন না। এইভাবে চেষ্টা করা হলে আপনি নীচের ত্রুটিগুলি পেয়ে যাবেন। - 'OR' কীওয়ার্ডের নিকটে ভুল সিনট্যাক্স। - 'ক্রিয়েট / আলেটার পদ্ধতি' অবশ্যই ক্যোয়ারী ব্যাচের প্রথম বিবৃতি হতে হবে।
ডিভ তিওয়ারি

3
@ ডিভিটিওয়ারি, এটি এসকিউএল ২০১ 2016-তে স্পষ্টতই বৈধ। এটি কেবলমাত্র এসকিউএল সার্ভারকে এই ওরাকল বৈশিষ্ট্যটি ধরতে 11 বছর সময় নিয়েছিল, স্পষ্টতই :)
জোসেফস্টাইন্স

1
@ জোসেফসটিউনস প্রকৃতপক্ষে, আপনি সঠিক! এতক্ষণ তারা কীভাবে একটি গুরুত্বপূর্ণ বৈশিষ্ট্যটি মিস করেছিল তা আমি বুঝতে পারি না।
দিব তিওয়ারি

@ ডিভিটিওয়ারি এটি বিকাশকারীদের পছন্দ: তৈরি করুন বা আগের চেয়ে আরও বেশি দেরী করুন :)
লুকাশজ সজোদা

14

আমি ব্যবহার করি:

IF OBJECT_ID('[dbo].[myView]') IS NOT NULL
DROP VIEW [dbo].[myView]
GO
CREATE VIEW [dbo].[myView]
AS

...

সম্প্রতি আমি এই ধরণের স্টাফের জন্য কিছু ইউটিলিটি পদ্ধতি যুক্ত করেছি:

CREATE PROCEDURE dbo.DropView
@ASchema VARCHAR(100),
@AView VARCHAR(100)
AS
BEGIN
  DECLARE @sql VARCHAR(1000);
  IF OBJECT_ID('[' + @ASchema + '].[' + @AView + ']') IS NOT NULL
  BEGIN
    SET @sql  = 'DROP VIEW ' + '[' + @ASchema + '].[' + @AView + '] ';
    EXEC(@sql);
  END 
END

তাই এখন লিখি

EXEC dbo.DropView 'mySchema', 'myView'
GO
CREATE View myView
...
GO

আমি মনে করি এটি আমার চিত্রনাট্যগুলিকে কিছুটা পাঠযোগ্য করে তোলে


7

আমি সাধারণত এই জাতীয় কিছু ব্যবহার করি:

if exists (select * from dbo.sysobjects
  where id = object_id(N'dbo.MyView') and
  OBJECTPROPERTY(id, N'IsView') = 1)
drop view dbo.MyView
go
create view dbo.MyView [...]


3

এটি এসকিউএল সার্ভার 2017 এ আমার পক্ষে ভাল কাজ করে:

USE MSSQLTipsDemo 
GO
CREATE OR ALTER PROC CreateOrAlterDemo
AS
BEGIN
SELECT TOP 10 * FROM [dbo].[CountryInfoNew]
END
GO

https://www.mssqltips.com/sqlservertip/4640/new-create-or-alter-statement-in-


ধন্যবাদ, এই দুর্দান্ত। আমি দেখতে পাচ্ছি যে এই সিনট্যাক্স এসকিউএল 2016. চালু হয় যখন আমি প্রশ্ন লিখেছিলেন, এটা এসকিউএল 2005 সালে পথ ফিরে ছিল
JosephStyons

2

আপনি একটি ভিউ আপডেট করার জন্য অলটার ব্যবহার করতে পারেন, তবে এটি ওরাকল কমান্ডের চেয়ে আলাদা কারণ এটি যদি কেবলমাত্র ভিউ ইতিমধ্যে বিদ্যমান থাকে তবে এটি কাজ করে। সম্ভবত ড্যাভকের উত্তরটি দিয়ে আরও ভাল করা যেহেতু এটি সর্বদা কার্যকর হবে।


1
যদিও ALTER বিদ্যমান অনুমতিগুলি রাখে (এবং যদি নতুন সংস্করণে সিনট্যাক্স ত্রুটি থাকে তবে পুরানো সংস্করণ ধরে রাখে)। সুতরাং একটি স্টাব তৈরি করতে যদি উপস্থিত না থাকে ... এবং তারপরে এটির / মূল প্রতিস্থাপনের জন্য বিকল্পগুলি অনুমতি এবং নির্ভরতা বজায় রাখতে আরও ভাল হতে পারে using
ক্রাইস্টেন

1

এসকিউএল সার্ভার 2016 (বা আরও নতুন) এ আপনি এটি ব্যবহার করতে পারেন:

CREATE OR ALTER VIEW VW_NAMEOFVIEW AS ...

এসকিউএল সার্ভারের পুরানো সংস্করণগুলিতে আপনাকে এরকম কিছু ব্যবহার করতে হবে

DECLARE @script NVARCHAR(MAX) = N'VIEW [dbo].[VW_NAMEOFVIEW] AS ...';

IF NOT EXISTS(SELECT * FROM sys.views WHERE name = 'VW_NAMEOFVIEW')
-- IF OBJECT_ID('[dbo].[VW_NAMEOFVIEW]') IS NOT NULL
BEGIN EXEC('CREATE ' + @script) END
ELSE
BEGIN EXEC('ALTER ' + @script) END

অথবা, যদি ভিউতে কোনও নির্ভরতা না থাকে তবে আপনি কেবল এটি ফেলে দিয়ে পুনরায় তৈরি করতে পারেন:

IF EXISTS(SELECT * FROM sys.views WHERE name = 'VW_NAMEOFVIEW')
-- IF OBJECT_ID('[dbo].[VW_NAMEOFVIEW]') IS NOT NULL
BEGIN 
   DROP VIEW [VW_NAMEOFVIEW];
END

CREATE VIEW [VW_NAMEOFVIEW] AS ...

1
আমি এসকিউএল সার্ভার 2016 (বা আরও নতুন) ব্যবহার করছি এবং আমি CREATE OR REPLACE VIEWসিনট্যাক্স ব্যবহার করতে পারি না । সঠিক বাক্য গঠন CREATE OR ALTER VIEW। কীভাবে আসে, যে সর্ব্বোডি বলে যে এটি CREATE OR REPLACEঅন্য যে সুত্রে আমি খুঁজে পেয়েছি তা পাওয়া গেছে Wo
ওউআইইইই

@ ওয়াল, ক্রিয়েট বা রিপ্লেস হ'ল ওরাকলে সিনট্যাক্স (প্রশ্নটি দেখুন)
ইউজিন লয়েনোক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.