Sql запрос на создание таблицы: MS SQL Server и T-SQL
Содержание
Создание запросов на создание таблицы — Visual Database Tools
Twitter
LinkedIn
Facebook
Адрес электронной почты
-
Статья -
- Чтение занимает 2 мин
-
Применимо к:SQL Server
При помощи запросов на создание таблицы в новую таблицу можно копировать строки, что может оказаться полезным для создания подмножества данных и копирования содержимого таблиц из одной базы данных в другую. Запрос на создание таблицы похож на запрос на вставку результатов, но создает новую таблицу, в которую затем копируются строки.
При создании запроса на создание таблицы указывают:
Имя новой таблицы базы данных (целевой таблицы).
Таблицу или таблицы, из которых копируются строки (исходную таблицу). Можно копировать данные из одной таблицы или из соединенных таблиц.
Столбцы в исходной таблице, содержимое которых нужно скопировать.
Порядок сортировки, когда нужно скопировать строки в определенном порядке.
Условия поиска для выборки строк, которые нужно скопировать.
Параметры группировки для случаев, когда нужно скопировать только сводные данные.
Например, следующий запрос создает новую таблицу с именем uk_customers
и копирует в нее данные из таблицы customers
:
SELECT * INTO uk_customers FROM customers WHERE country = 'UK'
Для успешного выполнения запроса на создание таблицы:
Создание запроса на создание таблицы
Добавьте на панели «Диаграмма» исходную таблицу или таблицы.
В меню Конструктор запросов наведите указатель на пункт Тип изменения, а затем выберите пункт Создать таблицу.
В диалоговом окне Создать таблицу введите имя целевой таблицы. Конструктор запросов и представлений не проверяет, есть ли уже такое имя и имеется ли разрешение на создание таблицы.
Чтобы создать целевую таблицу в другой базе данных, укажите полное имя целевой таблицы, состоящее из имени целевой базы данных, имени владельца (если требуется) и имени таблицы.
Укажите столбцы, из которых будут копироваться данные, добавив их к запросу. Дополнительные сведения см. в статье Добавление столбцов в запросы (визуальные инструменты для баз данных). Копируются только те столбцы, которые добавлены в запрос. Чтобы скопировать строки целиком, выберите * (все столбцы).
Конструктор запросов и представлений добавляет выбранные столбцы к столбцу Столбец панели критериев.
Чтобы скопировать строки в определенном порядке, укажите порядок сортировки. Дополнительные сведения см. в разделе Сортировка и группирование результатов запроса.
Укажите, какие строки необходимо копировать, введя условия поиска. Дополнительные сведения см. в разделе Определение критериев поиска.
Если условия поиска не заданы, в целевую таблицу будут скопированы все строки исходной таблицы.
Примечание
При добавления столбца для поиска на панели критериев конструктор запросов и представлений также включит его в список столбцов, подлежащих копированию. Если столбец необходим для поиска, но копировать его не нужно, снимите флажок рядом с именем этого столбца в прямоугольнике, представляющем таблицу или объект со структурой таблицы.
Чтобы скопировать сводные данные, укажите параметры Group By. Дополнительные сведения см. в разделе Резюмирование результатов запросов.
При выполнении запроса на создание таблицы в панели результатовне выводятся никакие результаты. Вместо этого появляется сообщение о количестве скопированных строк.
Разделы по конструированию запросов и представлений (визуальные инструменты для баз данных)
[Типы запросов(../../ssms/visual-db-tools/types-of-queries-visual-database-tools.md)
Создать таблицу запроса (Управление данными)—ArcGIS Pro
Подпись | Описание | Тип данных |
Входные таблицы | Имя таблицы или таблиц, которые будут использоваться в запросе. Если перечислено несколько таблиц, то с помощью параметра Выражение можно установить правила их соединения. Входная таблица может быть из базы геоданных или из подключения к базе данных. | Table View; Raster Layer |
Имя таблицы | Имя слоя или представления таблицы, которое будет создано. | Table View; Raster Layer |
Опции ключевых полей | Указывает, как будет создаваться поле ObjectID для запроса. Для слоев и представлений таблиц в ArcGIS необходимо поле ObjectID. Поле ObjectID — целочисленное поле, значения которого используются для уникальной идентификации строк данных. По умолчанию – Использовать ключевые поля (USE_KEY_FIELDS в Python). | String |
Ключевые поля (Дополнительный) | Поле или комбинация полей, которые могут быть использованы для идентификации строки в запросе. Этот параметр будет использоваться, когда параметр Опции ключевых полей задан как Использовать ключевые поля. | Field |
Поля (Дополнительный) | Поля, которые будут включены в результирующий слой или представление таблицы. Если для поля установлен псевдоним, то именно он будет отображаться. Если не заданы поля, будут включены все поля из входной таблицы. Если в перечень полей добавляется поле Shape, результатом будет слой; в противном случае результатом будет представление таблицы. | Value Table |
Выражение (Дополнительный) | SQL-выражение, использованное для выбора поднабора записей. | SQL Expression |
arcpy.management. MakeQueryTable(in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
Имя | Описание | Тип данных |
in_table [in_table,…] | Имя таблицы или таблиц, которые будут использоваться в запросе. Если указано несколько таблиц, с помощью параметра where_clause можно задать правила их соединения. Входная таблица может быть из базы геоданных или из подключения к базе данных. | Table View; Raster Layer |
out_table | Имя слоя или представления таблицы, которое будет создано. | Table View; Raster Layer |
in_key_field_option | Указывает, как будет создаваться поле ObjectID для запроса. Для слоев и представлений таблиц в ArcGIS необходимо поле ObjectID. Поле ObjectID — целочисленное поле, значения которого используются для уникальной идентификации строк данных. По умолчанию – Использовать ключевые поля (USE_KEY_FIELDS в Python). | String |
in_key_field [in_key_field,…] (Дополнительный) | Поле или комбинация полей, которые могут быть использованы для идентификации строки в запросе. Этот параметр используется только при опции in_key_field_option = «USE_KEY_FIELDS». | Field |
in_field [[field, {alias}],…] (Дополнительный) | Поля, которые будут включены в результирующий слой или представление таблицы. Если для поля установлен псевдоним, то именно он будет отображаться. Если не заданы поля, будут включены все поля из входной таблицы. Если в перечень полей добавляется поле Shape, результатом будет слой; в противном случае результатом будет представление таблицы. | Value Table |
where_clause (Дополнительный) | SQL-выражение, использованное для выбора поднабора записей. | SQL Expression |
Пример кода
MakeQueryTable, пример 1 (окно Python)
В следующем скрипте окна Python показано, как используется функция MakeQueryTable в режиме прямого запуска.
import arcpy arcpy.env.workspace = "C:/data/data.gdb" arcpy.MakeQueryTable_management(["Counties","codemog"], "queryout", "ADD_VIRTUAL_KEY_FIELD", "", [["Counties.OBJECTID", 'ObjectID'], ["Counties. NAME", 'Name'], ["codemog.Males", 'Males'], ["codemog.Females", 'Females']], "Counties.FIPS = codemog.Fips and Counties.STATE_NAME = 'California'")
MakeQueryTable, пример 2 (автономный скрипт)
Следующий скрипт является примером использования инструмента MakeQueryTable в автономном режиме Python.
# MakeQueryTableOLEDB.py # Description: Create a query table from two OLE DB tables using a limited set of # fields and establishing an equal join. # Import system modules import arcpy # Local variables... tableList = ["c:/Connections/balrog.odc/vtest.COUNTIES",\ "c:/Connections/balrog.odc/vtest.CODEMOG"] fieldList = [["vtest.COUNTIES.OBJECTID", 'ObjectID'], ["vtest.COUNTIES.NAME", 'Name']\ ["vtest.CODEMOG.Males", 'Males'], ["vtest.CODEMOG.Females", 'Females']] whereClause = "vtest.COUNTIES.FIPS = vtest.CODEMOG.Fips" +\ "and vtest.COUNTIES.STATE_NAME = 'California'" keyField = "vtest. COUNTIES.OBJECTID" lyrName = "CountyCombined" # Make Query Table... arcpy.MakeQueryTable_management(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause) # Print the total rows print(arcpy.GetCount_management(lyrName)) # Print the fields fields = arcpy.ListFields(lyrName) for field in fields: print(field.name) # Save as a dBASE file arcpy.CopyRows_management(lyrName, "C:/temp/calinfo.dbf")
Сценарии
. Как в SQL Server сгенерировать оператор CREATE TABLE для данной таблицы?
— или вы можете создать хранимую процедуру… сначала с созданием идентификатора
USE [db] ИДТИ /****** Объект: StoredProcedure [dbo].[procUtils_InsertGeneratorWithId] Дата сценария: 13.06.2009 22:18:11 ******/ УСТАНОВИТЕ ANSI_NULLS ВКЛ. ИДТИ УСТАНОВИТЕ QUOTED_IDENTIFIER НА ИДТИ создать PROC [dbo].[procUtils_InsertGeneratorWithId] ( @domain_user varchar(50), @tableName varchar(100) ) как --Объявите курсор для получения информации о столбцах для указанной таблицы. DECLARE cursCol CURSOR FAST_FORWARD ДЛЯ ВЫБЕРИТЕ имя_столбца,тип_данных ИЗ information_schema. columns, ГДЕ имя_таблицы = @имя_таблицы ОТКРЫТЬ курсCol DECLARE @string nvarchar(3000) -- для хранения первой половины оператора INSERT DECLARE @stringData nvarchar(3000) --для хранения оператора, связанного с данными (VALUES). DECLARE @dataType nvarchar(1000) -- типы данных, возвращаемые для соответствующих столбцов DECLARE @IDENTITY_STRING nvarchar ( 100 ) УСТАНОВИТЬ @IDENTITY_STRING = ' ' выберите @IDENTITY_STRING НАБОР @string='INSERT '+@tableName+'(' УСТАНОВИТЬ @stringData='' ОБЪЯВИТЬ @colName nvarchar(50) FETCH NEXT FROM cursCol INTO @colName,@dataType ЕСЛИ @@fetch_status<>0 начинать print 'Таблица '+@tableName+' не найдена, обработка пропущена.' закрыть курсол освободить курскол возвращаться КОНЕЦ ПОКА @@FETCH_STATUS=0 НАЧИНАТЬ ЕСЛИ @dataType в ('varchar','char','nchar','nvarchar') НАЧИНАТЬ --SET @stringData=@stringData+'''''''''+isnull('+@colName+','''')+'''''',''+' SET @stringData=@stringData+''''+'''+isnull('''''+'''''+'+@colName+'+'''''+''''',''NULL '')+'',''+' КОНЕЦ ЕЩЕ if @dataType in ('text','ntext') -- если тип данных текстовый или что-то другое НАЧИНАТЬ SET @stringData=@stringData+'''''''''+isnull(cast('+@colName+' as varchar(2000)),'''')+'''''',''+' КОНЕЦ ЕЩЕ IF @dataType = 'money' -- потому что деньги не конвертируются из varchar неявно НАЧИНАТЬ SET @stringData=@stringData+'''convert(money,''''''+isnull(cast('+@colName+' as varchar(200)),''0. 0000'')+'''''') ,''+' КОНЕЦ ЕЩЕ ЕСЛИ @dataType='datetime' НАЧИНАТЬ --SET @stringData=@stringData+'''convert(datetime,''''''+isnull(cast('+@colName+' as varchar(200)),''0'')+''''' '),''+' --SELECT 'INSERT Authorizations(StatusDate) VALUES('+'convert(datetime,'+isnull(''''+convert(varchar(200),StatusDate,121)+'''','NULL')+' ,121),)' ОТ Полномочий --SET @stringData=@stringData+'''convert(money,''''''+isnull(cast('+@colName+' as varchar(200)),''0.0000'')+''''' '),''+' SET @stringData=@stringData+'''convert(datetime,'+'''+isnull('''''+'''''+convert(varchar(200),'+@colName+',121)+' ''''+''''',''NULL'')+'',121),''+' -- 'convert(datetime,'+isnull(''''+convert(varchar(200),StatusDate,121)+'''','NULL')+',121),)' ИЗ авторизаций КОНЕЦ ЕЩЕ ЕСЛИ @dataType='изображение' НАЧИНАТЬ SET @stringData=@stringData+'''''''''+isnull(cast(convert(varbinary,'+@colName+') as varchar(6)),''0'')+'''''' ,''+' КОНЕЦ ELSE --предполагается, что тип данных - int,bit,numeric,decimal НАЧИНАТЬ --SET @stringData=@stringData+'''''''''+isnull(cast('+@colName+' as varchar(200)),''0'')+'''''','' +' --SET @stringData=@stringData+'''convert(datetime,'+'''+isnull('''''+'''''+convert(varchar(200),'+@colName+',121) +'''''+''''',''NULL'')+'',121),''+' SET @stringData=@stringData+''''+'''+isnull('''''+'''''+convert(varchar(200),'+@colName+')+'''''+' '''',''NULL'')+'',''+' КОНЕЦ НАБОР @string=@string+@colName+',' FETCH NEXT FROM cursCol INTO @colName,@dataType КОНЕЦ ОБЪЯВИТЬ @Query nvarchar (4000) SET @query ='SELECT '''+substring(@string,0,len(@string)) + ') VALUES(''+ ' + substring(@stringData,0,len(@stringData)-2)+' ''+'')'' FROM '+@tableName exec sp_executesql @запрос --выберите @запрос ЗАКРЫТЬ cursCol DEALLOCATE cursCol /* ИСПОЛЬЗОВАНИЕ */ ИДТИ
— и второй без ID INSERTION
USE [db] ИДТИ /****** Объект: StoredProcedure [dbo]. [procUtils_InsertGenerator] Дата сценария: 13.06.2009 22:20:52 ******/ УСТАНОВИТЕ ANSI_NULLS ВКЛ. ИДТИ УСТАНОВИТЕ QUOTED_IDENTIFIER НА ИДТИ СОЗДАТЬ PROC [dbo].[procUtils_InsertGenerator] ( @domain_user varchar(50), @tableName varchar(100) ) как --Объявите курсор для получения информации о столбцах для указанной таблицы. DECLARE cursCol CURSOR FAST_FORWARD ДЛЯ -- ВЫБЕРИТЕ имя_столбца,тип_данных ИЗ information_schema.columns, ГДЕ имя_таблицы = @имя_таблицы /* НОВЫЙ ВЫБЕРИТЕ c.name , sc.data_type ИЗ sys.extended_properties AS ep ВНУТРЕННЕЕ СОЕДИНЕНИЕ sys.tables AS t ON ep.major_id = t.object_id ВНУТРЕННЕЕ СОЕДИНЕНИЕ sys.columns AS c ON ep.major_id = c.object_id И ep.minor_id = c.column_id INNER JOIN INFORMATION_SCHEMA.COLUMNS sc ON t.name = sc.table_name и c.name = sc.column_name ГДЕ t.name = @tableName и c.is_identity=0 */ выберите object_name(c.object_id) "TABLE_NAME", c.name "COLUMN_NAME", s.name "DATA_TYPE" из sys.columns c присоединиться к sys.systypes (s.xtype = c.system_type_id) где object_name(c. object_id) in (выберите имя из sys.tables, где имя не похоже на «sysdiagrams») И object_name(c.object_id) в (выберите имя из sys.tables, где [name]=@tableName ) и c.is_identity=0 и s.name не похоже на 'sysname' ОТКРЫТЬ курсCol DECLARE @string nvarchar(3000) -- для хранения первой половины оператора INSERT DECLARE @stringData nvarchar(3000) --для хранения оператора, связанного с данными (VALUES). DECLARE @dataType nvarchar(1000) -- типы данных, возвращаемые для соответствующих столбцов DECLARE @IDENTITY_STRING nvarchar ( 100 ) УСТАНОВИТЬ @IDENTITY_STRING = ' ' выберите @IDENTITY_STRING НАБОР @string='INSERT '+@tableName+'(' УСТАНОВИТЬ @stringData='' ОБЪЯВИТЬ @colName nvarchar(50) FETCH NEXT FROM cursCol INTO @tableName , @colName,@dataType ЕСЛИ @@fetch_status<>0 начинать print 'Таблица '+@tableName+' не найдена, обработка пропущена.' закрыть курсол освободить курскол возвращаться КОНЕЦ ПОКА @@FETCH_STATUS=0 НАЧИНАТЬ ЕСЛИ @dataType в ('varchar','char','nchar','nvarchar') НАЧИНАТЬ --SET @stringData=@stringData+'''''''''+isnull('+@colName+','''')+'''''',''+' SET @stringData=@stringData+''''+'''+isnull('''''+'''''+'+@colName+'+'''''+''''',''NULL '')+'',''+' КОНЕЦ ЕЩЕ if @dataType in ('text','ntext') -- если тип данных текстовый или что-то другое НАЧИНАТЬ SET @stringData=@stringData+'''''''''+isnull(cast('+@colName+' as varchar(2000)),'''')+'''''',''+' КОНЕЦ ЕЩЕ IF @dataType = 'money' -- потому что деньги не конвертируются из varchar неявно НАЧИНАТЬ SET @stringData=@stringData+'''convert(money,''''''+isnull(cast('+@colName+' as varchar(200)),''0. 0000'')+'''''') ,''+' КОНЕЦ ЕЩЕ ЕСЛИ @dataType='datetime' НАЧИНАТЬ --SET @stringData=@stringData+'''convert(datetime,''''''+isnull(cast('+@colName+' as varchar(200)),''0'')+''''' '),''+' --SELECT 'INSERT Authorizations(StatusDate) VALUES('+'convert(datetime,'+isnull(''''+convert(varchar(200),StatusDate,121)+'''','NULL')+' ,121),)' ОТ Полномочий --SET @stringData=@stringData+'''convert(money,''''''+isnull(cast('+@colName+' as varchar(200)),''0.0000'')+''''' '),''+' SET @stringData=@stringData+'''convert(datetime,'+'''+isnull('''''+'''''+convert(varchar(200),'+@colName+',121)+' ''''+''''',''NULL'')+'',121),''+' -- 'convert(datetime,'+isnull(''''+convert(varchar(200),StatusDate,121)+'''','NULL')+',121),)' ИЗ авторизаций КОНЕЦ ЕЩЕ ЕСЛИ @dataType='изображение' НАЧИНАТЬ SET @stringData=@stringData+'''''''''+isnull(cast(convert(varbinary,'+@colName+') as varchar(6)),''0'')+'''''' ,''+' КОНЕЦ ELSE --предполагается, что тип данных - int,bit,numeric,decimal НАЧИНАТЬ --SET @stringData=@stringData+'''''''''+isnull(cast('+@colName+' as varchar(200)),''0'')+'''''','' +' --SET @stringData=@stringData+'''convert(datetime,'+'''+isnull('''''+'''''+convert(varchar(200),'+@colName+',121) +'''''+''''',''NULL'')+'',121),''+' SET @stringData=@stringData+''''+'''+isnull('''''+'''''+convert(varchar(200),'+@colName+')+'''''+' '''',''NULL'')+'',''+' КОНЕЦ НАБОР @string=@string+@colName+',' FETCH NEXT FROM cursCol INTO @tableName , @colName,@dataType КОНЕЦ ОБЪЯВИТЬ @Query nvarchar (4000) SET @query ='SELECT '''+substring(@string,0,len(@string)) + ') VALUES(''+ ' + substring(@stringData,0,len(@stringData)-2)+' ''+'')'' FROM '+@tableName exec sp_executesql @запрос --выберите @запрос ЗАКРЫТЬ cursCol DEALLOCATE cursCol /* использовать пок идти DECLARE @RC int ОБЪЯВИТЬ @domain_user varchar(50) ОБЪЯВИТЬ @tableName varchar(100) -- TODO: Установите здесь значения параметров. установить @domain_user='yorgeorg' установить @tableName = 'tbGui_WizardTabButtonAreas' ВЫПОЛНИТЬ @RC = [POC].[dbo].[procUtils_InsertGenerator] @domain_user , @имя_таблицы */ ИДТИ
SQL CREATE TABLE
Резюме: в этом руководстве вы узнаете, как использовать оператор SQL CREATE TABLE для создания новых таблиц в базе данных.
Знакомство с оператором SQL CREATE TABLE
Таблица — это основной элемент базы данных. Таблица похожа на электронную таблицу, которая содержит столбцы и строки. Таблица используется для хранения данных, например, клиентов, поставщиков, продуктов.
Для создания новой таблицы используется оператор SQL CREATE TABLE. Ниже показан общий синтаксис SQL-оператора CREATE TABLE:
СОЗДАТЬ ТАБЛИЦУ table_name( имя_столбца1 тип_данных (длина_данных), имя_столбца2 тип_данных (длина_данных), .. ОГРАНИЧЕНИЯ имя_ограничения ПЕРВИЧНЫЙ КЛЮЧ|УНИКАЛЬНЫЙ|. .. )
Рассмотрим оператор более подробно:
- Имя таблицы : рекомендуется, чтобы имя таблицы было как можно более осмысленным. Для названия таблицы следует использовать форму множественного числа существительного, например, продукты, заказы, поставщики .. .и т.д.
- Имя столбца : как и имя таблицы, вы должны использовать значение имени столбца. Если имя столбца длиннее, вы можете использовать аббревиатуру, например ID для идентификатора, No для номера.
- Тип данных столбца : вы должны выбрать соответствующий тип данных для каждого столбца в таблице. Наиболее распространенными типами данных являются текстовые (VARCHAR, NVARCHAR), числовые (SMALLINT, INT, BIGINT), DATE, TIME, DATETIME, BLOB. Пожалуйста, обратитесь к конкретному руководству пользователя системы баз данных, с которой вы работаете, чтобы найти поддерживаемые типы данных.
- Размер столбца : вы должны указать максимальную длину данных для каждого столбца. Например, если вы храните название продукта, попробуйте представить максимальную длину, которую может содержать продукт.
- Ограничение : Вы можете определить ограничение PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL или CHECK с помощью ключевого слова CONSTRAINT. Ключевое слово CONSTRAINT является необязательным.
SQL CREATE TABLE Пример
Мы собираемся создать новую таблицу с именем Projects для хранения данных проекта. Ниже приведен оператор для создания таблицы Projects .
Язык кода: PHP (php)
СОЗДАТЬ ТАБЛИЦУ Проекты ( ID проекта int(11) NOT NULL AUTO_INCREMENT, Имя varchar(255) НЕ NULL, Описание varchar(4000) ПО УМОЛЧАНИЮ NULL, Дата BeginDate НЕ NULL, Дата EndDate ПО УМОЛЧАНИЮ NULL, ПЕРВИЧНЫЙ КЛЮЧ (ID_проекта) )
В таблице проектов :
- PorjectID: первичный ключ, определяемый ограничением PRIMARY KEY.