Вопрос больше, чем просто использование иссушает 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.
Они просто делают код более явным так, чтобы было похоже, что Вы знаете то, что Вы делали.
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
См. ALTER SCHEMA .
Обобщенный синтаксис:
ALTER SCHEMA TargetSchema TRANSFER SourceSchema.TableName;
Вы можете запустить следующее, которое сгенерирует набор операторов 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
Получил с этого сайта .
Там также говорится о том, чтобы сделать то же самое для сохраненных процессов, если вам нужно.
USE MyDB;
GO
ALTER SCHEMA dbo TRANSFER jonathan.MovieData;
GO
Ссылка: ALTER SCHEMA
Способ сделать это для отдельного объекта:
изменить схему передачи dbo jonathan.MovieData
ms-help: //MS.SQLCC.v9 /MS.SQLSVR.v9.en/tsqlref9/html/0a760138-460e-410a-a3c1-d60af03bf2ed.htm
ALTER SCHEMA schema_name TRANSFER securable_name