Member 13152922
ВЫБИРАТЬ
Т.Столбцам table_catalog,
Т.TABLE_SCHEMA,
t.TABLE_NAME,
'создать таблицу '+функции quotename(т. TABLE_SCHEMA)+'.' + Функции quotename(так.наименование) + ' (' + левая(о. Список, лен(о. Список)-1) + '); '
+ Случай, когда tc. Constraint_Name равен NULL, то "
ЕЩЁ
Альтер таблицы ' + функции quotename(т. TABLE_SCHEMA)+'.' + Функции quotename(так.название)
+ Добавить ограничение ' + ТС.Первичный ключ constraint_name и + '' + ' (' +левый(Дж.Список, лен(Дж.Список)-1) + '); '
Конец как 'SQL_CREATE_TABLE'
Из sysobjects так
ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ (
ВЫБИРАТЬ
'['+column_name+'] '
+ тип данных
+ чехол типу data_type
когда 'sql_variant' тогда "
когда "текст", то "
когда "ntext" тогда "
когда 'десятичное число' тогда '(' + литые(numeric_precision как varchar) + ', ' + литые(numeric_scale как varchar) + ')'
ещё
объединяться(
'('+ случай, когда character_maximum_length = -1
потом "Макс"
else cast(character_maximum_length as varchar) end
+ ')','')
конец
+ ' '
+ случай, когда существует (
Выберите идентификатор
Из syscolumns
ГДЕ
имя_объекта(ИД) = так.название
и имя = column_name
и columnproperty(id, name, 'IsIdentity') = 1
) затем
Личность(' +
cast(ident_seed(so.name) как варчар) + ',' +
cast(ident_incr(so.name) как варчар) + ')'
еще ''
конец
+ ' '
+ (случай, когда IS_NULLABLE = 'No', то ' NOT 'else' end)
+ 'NULL '
+ случай, когда information_schema. columns.COLUMN_DEFAULT не равно NULL, тогда 'DEFAULT '+ information_schema. columns.COLUMN_DEFAULT
ЕЩЕ ''
КОНЕЦ
+ ', '-- не может иметь имени поля, иначе мы получим XML
Из information_schema. columns
Где table_name = so.name
Порядок по ordinal_position
ДЛЯ XML-ПУТИ(")
) o (список)
Левое соединение регулярных выражений.table_constraints ТС на
ТС.Аргумент table_name = так.Название
И tc. Constraint_Type = 'первичный ключ'
Левое соединение регулярных выражений.таблицы T на
Т.Аргумент table_name = так.Название
ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ (
Выберите QuoteName (Column_Name) + ', '
Из регулярных выражений.key_column_usage КХУ
Где Ксю.Constraint_Name = tc. Constraint_Name
ПОРЯДОК ПО ORDINAL_POSITION
ДЛЯ XML-ПУТИ(")
) j (список)
ГДЕ
xtype = 'U'
И имя не в ('dtproperties')
-- И so.name = 'ASPStateTempSessions'
;
--Для использования в студии управления:
-- Один из недоброжелателей к приведенному выше sql-коду заключается в том, что если вы тестируете его с помощью SSMS, длинные операторы нелегко читать. Итак, согласно этому полезному сообщению, вот еще одна версия, которая несколько изменена, чтобы быть более легкой для глаз после нажатия на ссылку ячейки в сетке. Результаты более легко идентифицируются как красиво отформатированные инструкции CREATE TABLE для каждой таблицы в БД.
-- настроить
ОБЪЯВИТЬ @CRLF NCHAR(2)
SET @CRLF = Nchar(13) + NChar(10)
ОБЪЯВИТЬ @PLACEHOLDER NCHAR(3)
SET @PLACEHOLDER =' {:}'
-- основной запрос
ВЫБИРАТЬ
Т.Столбцам table_catalog,
Т.TABLE_SCHEMA,
t.TABLE_NAME,
БРОСАТЬ(
ЗАМЕНЯТЬ(
'создать таблицу' + функции quotename(т. TABLE_SCHEMA) + '.' + Функции quotename(так.наименование) + ' (' + @символы не экранируются
+ Левая(о. Список, лен(о. Список) - (лен(@заполнитель)+2)) + @кода crlf + ');' + @символы не экранируются
+ Случай, когда tc. Constraint_Name равен NULL, то "
ЕЩЁ
Альтер таблицы ' + функции quotename(т. TABLE_SCHEMA) + '.' + Функции quotename(так.Название)
+ Добавить ограничение ' + ТС.Первичный ключ constraint_name и + ' (' +левый(Дж.Список, лен(Дж.Список) - 1) + ');' + @эти символы не экранируются
КОНЕЦ,
@ЗАПОЛНИТЕЛЬ,
@Символы не экранируются
)
В xml-файле) как SQL_CREATE_TABLE'
Из sysobjects так
ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ (
ВЫБИРАТЬ
' '
+ '['+имя столбца+'] '
+ тип данных
+ чехол типу data_type
когда 'sql_variant' тогда "
когда "текст", то "
когда "ntext" тогда "
когда 'десятичное число' тогда '(' + литые(numeric_precision как varchar) + ', ' + литые(numeric_scale как varchar) + ')'
ещё
объединяться(
'('+ случай, когда character_maximum_length = -1
потом "Макс"
else cast(character_maximum_length as varchar) end
+ ')','')
конец
+ ' '
+ случай, когда существует (
Выберите идентификатор
Из syscolumns
ГДЕ
имя_объекта(ИД) = так.название
и имя = column_name
и columnproperty(id, name, 'IsIdentity') = 1
) затем
Личность(' +
cast(ident_seed(so.name) как варчар) + ',' +
cast(ident_incr(so.name) как варчар) + ')'
еще ''
конец
+ ' '
+ (случай, когда IS_NULLABLE = 'No', то ' NOT 'else' end)
+ 'NULL '
+ случай, когда information_schema. columns.COLUMN_DEFAULT не равно NULL, тогда 'DEFAULT '+ information_schema. columns.COLUMN_DEFAULT
ЕЩЕ ''
КОНЕЦ
+ ', '
+ @PLACEHOLDER -- обратите внимание, что у нас не может быть имени поля, иначе мы получим XML
Из information_schema. columns, где table_name = so.name
Порядок по ordinal_position
ДЛЯ XML-ПУТИ(")
) o (список)
Левое соединение регулярных выражений.table_constraints ТС на
ТС.Аргумент table_name = так.Название
И tc. Constraint_Type = 'первичный ключ'
Левое соединение регулярных выражений.таблицы T на
Т.Аргумент table_name = так.Название
ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ (
Выберите QUOTENAME (Column_Name) + ', '
Из регулярных выражений.key_column_usage КХУ
Где Ксю.Constraint_Name = tc. Constraint_Name
ПОРЯДОК ПО ORDINAL_POSITION
ДЛЯ XML-ПУТИ(")
) j (список)
ГДЕ
xtype = 'U'
И имя не в ('dtproperties')
-- И so.name = 'ASPStateTempSessions'
;