Как я изменяю схему дб на dbo

Вопрос больше, чем просто использование иссушает static_cast или кастинг стиля C, потому что существуют разные вещи, которые происходят при использовании C бросков стиля. Операторы кастинга C++ предназначаются для создания этих операций более явными.

На поверхности static_cast и броски стиля C появляются к тому же самому, например, при кастинге одного значения другому:

int i;
double d = (double)i;                  //C-style cast
double d2 = static_cast<double>( i );  //C++ cast

Оба из них бросают целочисленное значение к двойному. Однако, когда работа с вещами указателей становится более сложной. некоторые примеры:

class A {};
class B : public A {};

A* a = new B;
B* b = (B*)a;                                  //(1) what is this supposed to do?

char* c = (char*)new int( 5 );                 //(2) that weird?
char* c1 = static_cast<char*>( new int( 5 ) ); //(3) compile time error

В этом примере (1) возможно, хорошо, потому что объект, на который указывает A, является действительно экземпляром B. Но что, если Вы не знаете в той точке в коде, что на самом деле указывает на? (2) возможно, совершенно законный (Вы только хотите посмотреть на один байт целого числа), но это могла также быть ошибка, в этом случае ошибка, будет хорош, как (3). Операторы кастинга C++ предназначаются для представления этих проблем в коде путем обеспечения времени компиляции или ошибок времени выполнения, если это возможно.

Так, для строгого "значения, бросая" можно использовать static_cast. Если Вы хотите полиморфный кастинг во время выполнения использования указателей dynamic_cast. Если Вы действительно хотите забыть о типах, можно использовать reintrepret_cast. И просто бросить константу из окна существует const_cast.

Они просто делают код более явным так, чтобы было похоже, что Вы знаете то, что Вы делали.

113
задан Owen Blacker 10 April 2014 в 17:28
поделиться

5 ответов

ALTER SCHEMA dbo TRANSFER jonathan.MovieData;

См. ALTER SCHEMA .

Обобщенный синтаксис:

ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName; 
173
ответ дан 24 November 2019 в 02:41
поделиться

Вы можете запустить следующее, которое сгенерирует набор операторов ALTER sCHEMA для всех ваших талбов:

SELECT 'ALTER SCHEMA dbo TRANSFER ' + TABLE_SCHEMA + '.' + TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'jonathan'

Затем вам нужно скопировать и запустить операторы в анализаторе запросов.

Вот старый сценарий, который, я думаю, сделает это за вас, изменив владельца объекта. Однако в 2008 году не пробовал.

DECLARE @old sysname, @new sysname, @sql varchar(1000)

SELECT
  @old = 'jonathan'
  , @new = 'dbo'
  , @sql = '
  IF EXISTS (SELECT NULL FROM INFORMATION_SCHEMA.TABLES
  WHERE
      QUOTENAME(TABLE_SCHEMA)+''.''+QUOTENAME(TABLE_NAME) = ''?''
      AND TABLE_SCHEMA = ''' + @old + '''
  )
  EXECUTE sp_changeobjectowner ''?'', ''' + @new + ''''

EXECUTE sp_MSforeachtable @sql

Получил с этого сайта .

Там также говорится о том, чтобы сделать то же самое для сохраненных процессов, если вам нужно.

38
ответ дан 24 November 2019 в 02:41
поделиться
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO

Ссылка: ALTER SCHEMA

20
ответ дан 24 November 2019 в 02:41
поделиться

Способ сделать это для отдельного объекта:

изменить схему передачи dbo jonathan.MovieData

2
ответ дан 24 November 2019 в 02:41
поделиться

ms-help: //MS.SQLCC.v9 /MS.SQLSVR.v9.en/tsqlref9/html/0a760138-460e-410a-a3c1-d60af03bf2ed.htm

ALTER SCHEMA schema_name TRANSFER securable_name

1
ответ дан 24 November 2019 в 02:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: