SQL Server, эквивалентный Oracle создать или заменить вид -- sql-server пол Связанный проблема

SQL Server equivalent to Oracle's CREATE OR REPLACE VIEW


116
vote

проблема

русский

в Oracle, я могу повторно создать вид с одним оператором, как показано здесь:

 <код> CREATE OR REPLACE VIEW MY_VIEW AS SELECT SOME_FIELD FROM SOME_TABLE WHERE SOME_CONDITIONS   

По мере того, как синтаксис подразумевает, это отбросит старый вид и повторно создает его с тем, что я дал.

Есть ли эквивалент в MSSQL (SQL Server 2005 или более поздней версии), который будет делать то же самое?

Английский оригинал

In Oracle, I can re-create a view with a single statement, as shown here:

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

As the syntax implies, this will drop the old view and re-create it with whatever definition I've given.

Is there an equivalent in MSSQL (SQL Server 2005 or later) that will do the same thing?

</div
  

Список ответов

104
 
vote
vote
Лучший ответ
 
<Р> Решения выше, хотя они получат работу, делают это на риск падения разрешения пользователя. Я предпочитаю, чтобы сделать мой создать или заменить точку зрения или хранимые процедуры следующим образом.
 <код> enrolled1  
 

The solutions above though they will get the job done do so at the risk of dropping user permissions. I prefer to do my create or replace views or stored procedures as follows.

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 
</div
 
 
         
         
45
 
vote

Вы можете использовать «если существует», чтобы проверить, существует ли представление и падение, если он делает.

. Если существует (выберите table_name из information_schema.views         Где table_name = 'myView')     MyView ИДТИ  Создать просмотр MyView. В КАЧЕСТВЕ      .... ИДТИ 
 

You can use 'IF EXISTS' to check if the view exists and drop if it does.

 IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS         WHERE TABLE_NAME = 'MyView')     DROP VIEW MyView GO  CREATE VIEW MyView AS       .... GO 
</div
 
 
 
 
39
 
vote

Для справки от <Код> SQL Server 2016 SP1+ Вы можете использовать <код> CREATE OR ALTER VIEW синтаксис.

MSDN Создать представление :

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

или тель

Условно изменяет вид только в том случае, если он уже существует.

DB DRO

.
 

For reference from SQL Server 2016 SP1+ you could use CREATE OR ALTER VIEW syntax.

MSDN CREATE VIEW:

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

OR ALTER

Conditionally alters the view only if it already exists.

db<>fiddle demo

</div
 
 
       
       
14
 
vote

Я использую:

 <код> 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   

Я думаю, что это заставляет мои меры немного более читаемыми

 

I use:

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

...

Recently I added some utility procedures for this kind of stuff:

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 

So now I write

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

I think it makes my changescripts a bit more readable

</div
 
 
7
 
vote

Я обычно использую что-то вроде этого:

 <код> 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 [...]   
 

I typically use something like this:

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 [...] 
</div
 
 
6
 
vote

на поскольку SQL Server 2016 у вас есть

 <код> DROP TABLE IF EXISTS [foo];   

MSDN Source

 

As of SQL Server 2016 you have

DROP TABLE IF EXISTS [foo]; 

MSDN source

</div
 
 
3
 
vote

Это работает нормально для меня на SQL Server 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-ELTECTION-IN-

 

It works fine for me on SQL Server 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-

</div
 
 
 
 
2
 
vote

Вы можете использовать ALTER, чтобы обновить представление, но это отличается от команды Oracle, поскольку она работает только, если представление уже существует. Вероятно, лучше с ответом Дейвека, так как это всегда будет работать.

 

You can use ALTER to update a view, but this is different than the Oracle command since it only works if the view already exists. Probably better off with DaveK's answer since that will always work.

</div
 
 
 
 
1
 
vote

в SQL Server 2016 (или новее) вы можете использовать это:

 <Код> CREATE OR ALTER VIEW VW_NAMEOFVIEW AS ...   

В более старых версиях SQL Server вы должны использовать что-то вроде

 <Код> CREATE OR ALTER VIEW0  

или, если нет зависимостей с видом, вы можете просто бросить его и воссоздать:

 <Код> CREATE OR ALTER VIEW1  
 

In SQL Server 2016 (or newer) you can use this:

CREATE OR ALTER VIEW VW_NAMEOFVIEW AS ... 

In older versions of SQL server you have to use something like

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 

Or, if there are no dependencies on the view, you can just drop it and recreate:

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 ... 
</div
 
 
   
   

Связанный проблема

0  Создайте триггер, чтобы проверить определенные столбцы  ( Create a trigger to check specific columns ) 
Я хотел бы иметь триггер, который проверяет, если столбец имеет определенное значение, я знаю, что я должен использовать иностранные ключи для этого, но в это...

0  Конвертировать стол в другой формат в MSSQL  ( Convert table to another format in mssql ) 
Я сталкиваюсь с проблемой с MS-SQL в получении вывода из таблицы в определенном формате. . Имя |. StringValue |. Parent_id. Полевое имя |. Testheader1 |. 3. ...

0  Код ошибки триггера SQL  ( Sql trigger error code ) 
Я пытаюсь разработать триггер SQL Server, но, похоже, это выбрасывает для меня ошибку, когда я обновляю записи, которые имеют одинаковые значения с помощью зн...

0  SQL Server - получить столбец, у которого есть конкретное значение  ( Sql server get column who have specific value ) 
У меня есть запрос SQL, который возвращает: <код> id | value 1 a 1 a 1 b 2 a 2 a Я хочу получить только...

-1  SQL Server для моего SQL  ( Sql server to my sql ) 
У меня есть новый проект от моего учителя, чтобы преобразовать базу данных в другую. Как я могу преобразовать базу данных MS SQL в MySQL с помощью Java? ...

0  Не читайте текстовые данные на таблицу SQL в C #  ( Not reading text data to sql table in c sharp ) 
Поэтому я следовал большему количеству помощи, которую я мог найти здесь. Я создал программу C #, которая читает из текстового файла и вставляет в таблицу баз...

0  Скопируйте все таблицы от MS Access (.mdb) на другой MS Access (.mdb) сразу (только структура)  ( Copy all the tables from ms access mdb to another ms access mdb at once str ) 
Как скопировать все таблицы (глобальные и локальные) из одного файла доступа MS (.mdb) в другой файл доступа MS (.mdb) только со структурой. Файл MS Access св...

2  CTE с динамическим запросом  ( Cte with dynamic query ) 
У меня есть динамический запрос, который я звоню, и я помещаю результат набор в переменной таблице <код> INSERT INTO @outTable EXEC sp_executesql @query; ...

23  Клиент браузера Microsoft SQL [Закрыто]  ( Microsoft sql browser client ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

0  Сервер SQL Server Rowing Rows Mathet - без «заказа»  ( Sql server paging rows by offset without order by ) 
Производственный стол мой содержит более миллиона записей. Требование требует для поискового запроса для извлечения записей по смещению и предельным параметра...

5  Создание экземпляра базы данных в C #  ( Creating a database instance in c sharp ) 
Можно ли создать экземпляр базы данных SQL с C # код. У меня нет проблем с добавлением базы данных к существующему экземпляру SQL, например Wonea Sqlexpress,...

1  Получение строки сразу после вставки возвращается нет результата  ( Getting row right after insert returns no result ) 
Я бегут тесты подразделения, и когда я пытаюсь вставить данные в базу данных и получить его сразу после того, как я ничего не получаю (я пробовал с <код> Data...

2  Условная сумма на основе даты (сверхурочная сумма по контракту)  ( Conditional sum based on date sum overtime by contract ) 
У меня есть стол с <Код> ID (Commonse_id), <код> Name , <код> time_worked , <код> time_to_work , <код> Contract_Start_Date , <код> Date_of_Entry . Эта таблиц...

0  Подзапрос в пункте in () вызывает ошибку  ( Subquery in an in clause causing error ) 
Я на SQL Server 2005, и я получаю ошибку, которую я почти не должен получать. <код> Msg 512, Level 16, State 1, Procedure spGetSavedSearchesByAdminUser, Lin...

1  Выполнить файл SQL, возвращать результаты как Pandas DataFrame  ( Execute sql file return results as pandas dataframe ) 
У меня есть сложный запрос SQL Server, который я хотел бы выполнить из Python и вернуть результаты в виде файла PandaFrame. Моя база данных читается только ...




© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.