Работа с несколькими версиями и экземплярами sql server

Способы определения имени экземпляра Microsoft SQL Server

Существует несколько способов узнать, какое имя экземпляра у SQL Server. Мы рассмотрим способы, которые подразумевают обращение к определенным системным функциям на языке T-SQL, а также способ, с помощью которого мы можем узнать имена всех экземпляров SQL Server, которые установлены на конкретном сервере.

Кроме этого я покажу способ определения имени экземпляра SQL Server без выполнения SQL инструкций, например, для случаев, когда нет возможности подключиться к SQL Server. Данный способ предполагает выполнение определённой инструкции на языке PowerShell.

Таким образом, для того чтобы определить имя экземпляра Microsoft SQL Server, Вы можете использовать тот способ, который будет удобнее в Вашем конкретном случае.

Способ 1 – функция @@SERVERNAME

Первый способ предполагает использование системной функции @@SERVERNAME, которая возвращает имя локального сервера, на котором работает SQL Server.

Функция @@SERVERNAME возвращает следующие данные:

Исходные данные Данные, которые возвращает функция
Если используется экземпляр по умолчанию «Имя_сервера»
Если используется именованный экземпляр «Имя_сервера\Имя_экземпляра»
Если используется экземпляр по умолчанию отказоустойчивого кластера «Сетевое_имя_экземпляра_отказоустойчивого_ кластера_windows_server»
Если используется именованный экземпляр отказоустойчивого кластера «Сетевое_имя_экземпляра_отказоустойчивого_ кластера_windows_server\имя_экземпляра»

Пример использования функции

   
   SELECT @@SERVERNAME AS SERVERNAME;

В моем случае используется именованный экземпляр Microsoft SQL Server, поэтому функция вернула соответствующие данные, где SQLEXPRESS и есть имя экземпляра SQL Server.

Способ 2 – функция @@SERVICENAME

Второй способ определения имени экземпляра Microsoft SQL Server предполагает использование функции @@SERVICENAME, которая возвращает имя раздела реестра, согласно которому запущен SQL Server.

Если текущий экземпляр является экземпляром по умолчанию, то данная функция возвращает «MSSQLSERVER», однако если же текущий экземпляр является именованным экземпляром, то эта функция возвращает имя этого экземпляра.

Пример использования функции

   
   SELECT @@SERVICENAME AS SERVICENAME;

В данном случае, так как у меня именованный экземпляр, функция @@SERVICENAME вернула имя экземпляра.

Способ 3 – функция SERVERPROPERTY

Следующий способ определения имени экземпляра SQL Server предполагает использование системной функции SERVERPROPERTY, которая возвращает много различных сведений о свойствах экземпляра Microsoft SQL Server.

Данная функция принимает один параметр, и если мы передадим значение «InstanceName», то она нам вернет имя экземпляра.

Однако здесь стоит учитывать, что если используется экземпляр по умолчанию, то функция вернет NULL.

Пример использования функции

   
   SELECT SERVERPROPERTY ('InstanceName') AS SERVERPROPERTY;

У меня именованный экземпляр, поэтому функция вернула имя экземпляра.

Способ 4 – процедура xp_regread

Если Вам необходимо узнать имена всех экземпляров SQL Server, которые установлены на конкретном сервере, то для этого Вы можете использовать системную хранимую процедуру xp_regread, которая умеет считывать параметры реестра Windows, в котором как раз и можно найти всю интересующую нас информацию об экземплярах Microsoft SQL Server.

Процедура принимает три параметра: в первом мы указываем название раздела реестра, во втором — путь к нужной нам ветке реестра, и третий — параметр, значение которого нам нужно считать.

Пример использования процедуры

   
   DECLARE @SQLServerInstances TABLE(
                                     LineNumber NVARCHAR(100),
                                     InstanceName NVARCHAR(100),
                                     Data NVARCHAR(100) NULL
                                    );
 
   INSERT INTO @SQLServerInstances
     EXECUTE xp_regread @rootkey = 'HKEY_LOCAL_MACHINE',
                        @key = 'SOFTWARE\Microsoft\Microsoft SQL Server',
                        @value_name = 'InstalledInstances';
 
   SELECT LineNumber, InstanceName
   FROM @SQLServerInstances;

У меня установлен только один экземпляр, поэтому инструкция вернула одну строку данных.

Проблемы установки и миграции, которые являются специфическими для SQL Server 2012 г.

  • Общие заметки

    • По умолчанию Windows 8 включает платформа .NET Framework 4.0. Windows 8.1 и Windows Server 2012 R2 включают платформа .NET Framework 4.5, Windows 10 и Windows Server 2016 включают платформа .NET Framework 4.6. Однако следующие SQL Server 2012 года зависят от платформа .NET Framework 3.5:

      • SQL Server 2012 ядро СУБД
      • Служба репликации
      • SQL Server Data Tools
      • Служба качества данных
      • Служба master data
      • Нативный режим службы отчетов
      • Full-Text поиск

      Поэтому перед установкой SQL Server 2014 или SQL Server 2012 года в отдельной или кластерной среде рекомендуется включить фреймворк .NET 3.5, чтобы предотвратить возможные SQL Server сбои установки.

      Сведения о том, как включить фреймворк .NET 3.5, просмотрите следующие статьи:

      • Установите платформа .NET Framework 3.5на Windows 10, Windows 8.1 и Windows 8 .

  • Некоторые SQL Server 2012 г. проблемы установки и установки исправлены в последних накопительных обновлениях за 2012 SQL Server 2012 г. Поэтому рекомендуется создать пакет установки slipstream, который включает SQL Server 2012 и CU3 или более позднее обновление с помощью . Дополнительные сведения о том, как это сделать, см. в SQL Server  г. Настройка только что получила более интеллектуальную информацию или как обновить SQL Server г. Настройка с помощью обновленного пакета установки (с помощью UpdateSource для получения умной установки) .

Рекомендации по созданию и использованию рекурсивных обобщенных табличных выражений

Следующие рекомендации применимы к определению рекурсивных обобщенных табличных выражений.

  • Определение рекурсивного обобщенного табличного выражения должно содержать по крайней мере два определения обобщенного табличного выражения запросов — закрепленный элемент и рекурсивный элемент. Может быть определено несколько закрепленных элементов и рекурсивных элементов, однако все определения запросов закрепленного элемента должны быть поставлены перед первым определением рекурсивного элемента. Все определения обобщенных табличных выражений запросов (ОТВ) являются закрепленными элементами, если только они не ссылаются на само ОТВ.

  • Закрепленные элементы должны объединяться одним из следующих операторов над множествами: UNION ALL, UNION, INTERSECT или EXCEPT. UNION ALL является единственным оператором над множествами, который может находиться между последним закрепленным элементом и первым рекурсивным элементом, а также может применяться при объединении нескольких рекурсивных элементов.

  • Количество столбцов членов указателя и рекурсивных элементов должно совпадать.

  • Тип данных столбца в рекурсивном элементе должен совпадать с типом данных соответствующего столбца в закрепленном элементе.

  • Предложение FROM рекурсивного элемента должно ссылаться на обобщенное табличное выражение expression_name только один раз.

  • Следующие элементы недопустимы в определении CTE_query_definition рекурсивного элемента:

    • (Если уровень совместимости базы данных имеет значение 110 или больше. См. раздел Критические изменения в функциях компонента ядра СУБД в SQL Server 2016).

    • Скалярное агрегирование

    • , , ( допускается)

    • Вложенные запросы

    • Указание, применимое к рекурсивной ссылке на обобщенное табличное выражение в определении CTE_query_definition.

Следующие рекомендации применимы к использованию рекурсивных обобщенных табличных выражений.

  • Все столбцы, возвращаемые рекурсивным обобщенным табличным выражением, могут содержать значения NULL, независимо от того, могут ли иметь значения NULL столбцы, возвращаемые участвующими инструкциями .

  • Неправильно составленное рекурсивное ОТВ может привести к бесконечному циклу. Например, если определение запроса рекурсивного элемента возвращает одинаковые значения как для родительского, так и для дочернего столбца, то образуется бесконечный цикл. Для предотвращения бесконечного цикла можно ограничить количество уровней рекурсии, допустимых для определенной инструкции, при помощи указания и значения в диапазоне от 0 до 32 767 в предложении OPTION инструкции , , или . Это дает возможность контролировать выполнение инструкции до тех пор, пока не будет разрешена проблема с кодом, из-за которой происходит зацикливание программы. Серверное значение по умолчанию равно 100. Если указано значение 0, ограничения не применяются. В одной инструкции может быть указан только одно значение . Дополнительные сведения см. в разделе Указания запросов (Transact-SQL).

  • Представление, содержащее рекурсивное обобщенное табличное выражение, не может использоваться для обновления данных.

  • Курсоры могут определяться на запросах при помощи обобщенных табличных выражений. Обобщенное табличное выражение является аргументом select_statement, который определяет результирующий набор курсора. Для рекурсивных обобщенных табличных выражений допустимы только однонаправленные и статические курсоры (курсоры моментального снимка). Если в рекурсивном обобщенном табличном выражении указан курсор другого типа, тип курсора преобразуется в статический.

  • В обобщенном табличном выражении могут быть ссылки на таблицы, находящиеся на удаленных серверах. Если на удаленный сервер имеются ссылки в рекурсивном элементе обобщенного табличного выражения, создается буфер для каждой удаленной таблицы, так что к таблицам может многократно осуществляться локальный доступ. Если это запрос обобщенного табличного выражения, Index Spool/Lazy Spools отображается в плане запроса и будет иметь дополнительный предикат . Это один из способов подтверждения надлежащей рекурсии.

  • Аналитические и агрегатные функции в рекурсивной части обобщенных табличных выражений применяются для задания текущего уровня рекурсии, а не для задания обобщенных табличных выражений. Такие функции, как , работают только с подмножествами данных, которые передаются им текущим уровнем рекурсии, но не со всем множеством данных, которые передаются в рекурсивную часть обобщенного табличного выражения. Дополнительные сведения см. в примере «Л. Использование аналитических функций в рекурсивном ОТВ» ниже.

Комментарии

Каждая база данных имеет счетчик, который увеличивается при каждой операции вставки или обновления в таблице, содержащей столбец типа rowversion в базе данных. Этот счетчик типа rowversion используется для работы с базами данных. Происходит отслеживание относительного времени базы данных, а не действительного времени, которое может быть связано с часами. В таблице может быть только один столбец типа rowversion. Каждый раз при изменении или вставке строки, содержащей столбец типа rowversion, увеличенное значение rowversion вставляется в столбец типа rowversion. Из-за этого свойства столбец типа rowversion нежелательно использовать в качестве ключа, особенно первичного. Любое обновление, сделанное в строке, изменяет значение rowversion и значение ключа. Если столбец является первичным ключом, старое значение ключа больше недействительно и внешние ключи, ссылающиеся на старое значение, становятся недействительными. Если на таблицу ссылается динамический курсор, все обновления изменяют положение строк в курсоре. Если столбец является ключом индекса, все обновления в строках данных также приводят к обновлению индекса. Значение rowversion увеличивается при каждом выполнении инструкции обновления, даже если значения в строке не изменяются. (Например, если значение в столбце равно 5 и инструкция обновления задает значение 5, это действие считается обновлением, несмотря на отсутствие изменений и значение rowversion увеличивается.)

Тип данных timestamp является синонимом типа данных rowversion и подчиняется правилам поведения синонимов типов данных. В инструкциях на языке описания данных DDL по возможности используйте rowversion вместо timestamp. Дополнительные сведения см. в статье Синонимы типов данных (Transact-SQL).

Тип данных Transact-SQL timestamp отличается от типа данных timestamp, определенного в стандарте ISO.

Примечание

Синтаксис timestamp является нерекомендуемым. В будущей версии Microsoft SQL Server этот компонент будет удален. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

В инструкции CREATE TABLE или ALTER TABLE необязательно указывать имя столбца с типом данных timestamp. Рассмотрим пример.

Если имя столбца не указать, Компонент SQL Server Database Engine формирует имя столбца типа timestamp. Синоним rowversion не подчиняется этому правилу. При использовании типа данных rowversion указание имени столбца обязательно.

Примечание

При использовании инструкции SELECT INTO, в которой столбец типа rowversion находится в списке SELECT, могут быть сформированы повторяющиеся значения rowversion. Использовать тип данных rowversion таким образом не рекомендуется.

Столбец типа rowversion, который не может принимать значение NULL, семантически эквивалентен столбцу типа binary(8). Столбец типа rowversion, который может принимать значение NULL, семантически эквивалентен столбцу типа varbinary(8).

С помощью столбца rowversion можно легко определить, выполнялась ли инструкция обновления применительно к строке с момента ее последнего считывания. При выполнении инструкции обновления применительно к строке значение rowversion изменяется. Если для строки не выполнялись инструкции обновления, значение rowversion будет таким же, как и при предыдущем считывании. Чтобы получить текущее значение rowversion для базы данных, используйте функцию @@DBTS.

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

Например, допустим, что была создана таблица с именем . Таблица заполняется данными при выполнении следующих инструкций Transact-SQL.

После этого можно использовать следующие инструкции Transact-SQL для управления оптимистичным параллелизмом таблицы при обновлении таблицы. Скрипт использует для представления значения rowversion на момент последнего считывания строки. Замените это значение фактическим значением rowversion. Примером фактического значения rowversion является .

В транзакцию можно также ввести эти образцы инструкций Transact-SQL. При запросе переменной в области действия транзакции можно получить обновленный столбец таблицы без отправки повторного запроса в таблицу .

Ниже приведен тот же пример с использованием синтаксиса timestamp. Замените фактическим значением timestamp.

Создание представлений и хранимых процедур

Представление является хранимой инструкцией SELECT, а хранимая процедура представляет собой одну или более инструкций Transact-SQL , выполняемых в виде пакета.

Представления запрашиваются так же, как таблицы, и не принимают параметры. Хранимые процедуры сложнее, чем представления. Хранимые процедуры содержат как входные, так и выходные параметры и могут содержать инструкции, которые управляют потоком кода, например IF и WHILE. Использование хранимых процедур для всех повторяющихся действий в базе данных является хорошим стилем программирования.

В этом примере используется инструкция CREATE VIEW, чтобы создать представление, которое выбирает только два столбца в таблице Products . Затем с помощью инструкции CREATE PROCEDURE создается хранимая процедура, которая принимает цену в качестве параметра и возвращает только те продукты, цена которых меньше значения, указанного в качестве параметра.

Создание представления

Выполните следующую инструкцию, создающую представление, которое выполняет инструкцию select и возвращает названия и цены продуктов пользователю.

Тестирование представления

С представлениями обращаются так же, как с таблицами. Используйте инструкцию , чтобы получить доступ к представлению.

Создание хранимой процедуры

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

Тестирование хранимой процедуры

Чтобы выполнить хранимую процедуру, введите и выполните следующую инструкцию. Эта процедура должна возвратить названия двух продуктов, введенных в таблицу на занятии 1, цена которых меньше .

Remarks

Очередь может быть использована как целевой объект инструкции SELECT. Однако содержимое очереди может быть изменено только с помощью инструкций, которые выполняются в таких диалогах компонента Компонент Service Broker, как SEND, RECEIVE и END CONVERSATION. Очередь не может быть целевым объектом инструкций INSERT, UPDATE, DELETE и TRUNCATE.

Очередь не может быть временным объектом. Поэтому имена очередей, начинающиеся с символа # , недопустимы.

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

Компонент Компонент Service Broker не останавливает хранимые процедуры активации, если в очереди отсутствуют сообщения. Хранимые процедуры активации должны завершить работу, если в течение короткого промежутка времени в очереди отсутствуют доступные сообщения.

Разрешения для хранимых процедур активации проверяются во время их активации компонентом Компонент Service Broker, а не при создании очереди. Инструкция CREATE QUEUE не проверяет, имеет ли пользователь, указанный в предложении EXECUTE AS, разрешения на выполнение хранимой процедуры, указанной в предложении PROCEDURE NAME.

Если очередь недоступна, компонент Компонент Service Broker сохраняет сообщения для служб, пользующихся данной очередью, в очереди передачи для базы данных. Представление каталога содержит представление очереди передачи.

Очередь относится к объектам схемы. Очереди появляются в представлении каталога .

Следующая таблица содержит столбцы в очереди.

Имя столбца Тип данных Описание
status tinyint Состояние сообщения. Инструкция RECEIVE возвращает сообщения со значением состояния, равным 1. Если хранение сообщений включено, то значение состояния устанавливается в 0. Если хранение сообщений выключено, то сообщение удаляется из очереди. Сообщения в очереди могут иметь одно из следующих состояний:=Сохраненное полученное сообщение1=Готовность к получению2=Еще не завершено3=Сохраненное отправленное сообщение
priority tinyint Уровень приоритета, назначенный для этого сообщения.
queuing_order bigint Порядковый номер сообщения в очереди.
conversation_group_id uniqueidentifier Идентификатор группы сообщений, которой принадлежит данное сообщение.
conversation_handle uniqueidentifier Дескриптор диалога, частью которого является данное сообщение.
message_sequence_number bigint Порядковый номер сообщения в диалоге.
service_name nvarchar(512) Имя службы, к которой относится диалог.
service_id int Идентификатор объекта службы SQL Server, к которой относится диалог.
service_contract_name nvarchar(256) Имя контракта, которому следует диалог.
service_contract_id int Идентификатор объекта контракта SQL Server, которому следует диалог.
message_type_name nvarchar(256) Имя типа сообщения, который описывает сообщение.
message_type_id int Идентификатор объекта SQL Server для типа сообщения, описывающий сообщение.
validation nchar(2) Проверка, используемая для сообщения: E = пустая N = нет X = XML
message_body varbinary(max) Содержимое сообщения.
message_enqueue_time datetime Время постановки сообщения в очередь.

Примеры

A. Получение всех столбцов для всех сообщений в группе сообщений

На следующем примере показано, как получаются все доступные сообщения для следующей доступной группы сообщений из очереди . Инструкция возвращает сообщения в виде результирующего набора.

Б. Получение указанных столбцов для всех сообщений в группе сообщений

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

В. Получение первого доступного сообщения в очереди

На следующем примере показано, как в качестве результирующего набора возвращается первое доступное сообщение из очереди .

Г. Получение всех сообщений для указанного диалога

На следующем примере показано, как в качестве результирующего набора возвращаются все доступные сообщения для указанного диалога из очереди .

Д. Получение сообщений для заданной группы сообщений

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

Е. Получение сообщений в табличную переменную

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

Ж. Получение сообщений без ограничения времени ожидания

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

З. Получение сообщений с ожиданием в течение указанного интервала времени

На следующем примере показано, как получаются все доступные сообщения для следующей доступной группы сообщений в очереди . Инструкция ожидает в течение 60 секунд или до тех пор, пока по крайней мере одно сообщение не станет доступным (в зависимости от того, что произойдет раньше). Инструкция возвращает результирующий набор, который содержит все столбцы сообщения, если доступно хотя бы одно сообщение. В противном случае инструкция возвращает пустой результирующий набор.

И. Получение сообщений с изменением типа столбца

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

К. Получение сообщений, извлечение данных из тела сообщения, извлечение состояния диалога

На следующем примере показано, как получается следующее доступное сообщение в очереди для следующей доступной группы сообщений. Если сообщение имеет тип , инструкция извлекает из тела сообщения идентификатор служащего и список элементов. Инструкция извлекает также состояние для диалога из таблицы .

Рекомендуемые средства

Следующие средства предоставляют графический пользовательский интерфейс (GUI).

Инструмент Description Операционная система
Azure Data Studio Простой редактор, с помощью которого можно выполнять SQL-запросы по требованию, а затем анализировать и сохранять результаты в виде текста, а также в форматах JSON или Excel. Редактируйте данные, упорядочивайте избранные подключения к базам данных и просматривайте объекты базы данных в знакомом интерфейсе. WindowsmacOSLinux
SQL Server Management Studio (SSMS) Управление экземпляром SQL Server или базой данных с полной поддержкой GUI. Возможности доступа, настройки, администрирования и разработки всех компонентов SQL Server, Базы данных SQL Azure и Azure Synapse Analytics, а также управления ими. Среда SSMS предоставляет единую полнофункциональную служебную программу, которая сочетает в себе обширную группу графических инструментов с рядом отличных редакторов сценариев для доступа к SQL для разработчиков и администраторов баз данных всех профессиональных уровней. Windows
SQL Server Data Tools (SSDT) Это современное средство разработки, позволяющее создавать реляционные базы данных SQL Server, базы данных SQL Azure, модели данных Analysis Services (AS), пакеты Integration Services (IS) и отчеты Reporting Services (RS). С помощью SSDT вы можете проектировать и развертывать любые типы содержимого SQL Server так же просто, как разрабатывать приложения в Visual Studio . Windows
Visual Studio Code Расширение mssql для Visual Studio Code — это официальное расширение SQL Server, которое поддерживает подключения к SQL Server и расширенные возможности редактирования для T-SQL в Visual Studio Code. Написание скриптов T-SQL в упрощенном редакторе. WindowsmacOSLinux

Как работает служба «Обозреватель SQL Server»

Если SQL Server настроен на использование протокола TCP/IP, то при запуске экземпляра SQL Serverсерверу назначается порт TCP/IP. Если включен протокол именованных каналов, SQL Server прослушивает указанный именованный канал. Этот порт или «канал», используется конкретным экземпляром для обмена данными с клиентскими приложениями. Экземпляру по умолчанию при установке назначается TCP-порт 1433 и канал , но затем эти значения могут быть изменены администратором сервера при помощи диспетчера конфигурации SQL Server . Поскольку порт или канал может использоваться только одним экземпляром SQL Server , именованным экземплярам, включая SQL Server Express, назначаются другие номера портов и имена каналов. По умолчанию, если и именованные экземпляры и SQL Server Express настроены для работы с динамическими портами, это означает, что доступный порт назначается при запуске SQL Server . При необходимости экземпляру SQL Serverможет быть назначен конкретный порт, и при соединении клиенты смогут указать именно его. Но если порт назначается динамически, то он может измениться в любой момент после перезапуска SQL Server , поэтому клиент может и не знать правильного номера порта.

После запуска SQL Server запускается браузер и пытается занять UDP-порт 1434. SQL Server читает реестр, находит все экземпляры SQL Server на данном компьютере и помечает используемые ими порты и именованные каналы. Если сервер имеет несколько сетевых плат, браузер SQL Server возвращает первый допустимый порт, который найден для SQL Server. SQL Server поддерживает протоколы ipv6 и ipv4.

При запросе клиентом SQL Server ресурсов SQL Server клиентская сетевая библиотека передает на сервер UDP-сообщение через порт 1434. SQL Server Браузер в ответ сообщает TCP/IP-порт или именованный канал запрошенного экземпляра. Затем сетевая библиотека клиентского приложения завершает соединение, отправляя запрос на сервер с указанием номера порта или имени канала, относящегося к нужному экземпляру.

Дополнительные сведения о запуске и остановке службы браузера SQL Server см. в электронной документации SQL Server .

Сравнение значений sql_variant

Тип sql_variant находится на вершине иерархического списка преобразования типов данных. Для сравнения данных типа sql_variant иерархия типов данных SQL Server разбивается на семейства типов.

Иерархия типов данных Семейство типов данных
sql_variant sql_variant
datetime2 Дата и время
datetimeoffset Дата и время
datetime Дата и время
smalldatetime Дата и время
date Дата и время
time Дата и время
float Приблизительное числовое значение
real Приблизительное числовое значение
decimal Точное числовое значение
money Точное числовое значение
smallmoney Точное числовое значение
bigint Точное числовое значение
int Точное числовое значение
smallint Точное числовое значение
tinyint Точное числовое значение
bit Точное числовое значение
nvarchar Юникод
nchar Юникод
varchar Юникод
char Юникод
varbinary Двоичные данные
binary Двоичные данные
uniqueidentifier Уникальный идентификатор

К сравнениям типов sql_variant применяются указанные ниже правила.

  • При сравнении значений sql_variant различных базовых типов данных, находящихся в разных семействах типов данных, большим из двух значений считается то, семейство типа данных которого находится выше в иерархии.
  • При сравнении значений sql_variant различных базовых типов данных, находящихся в одном семействе типов данных, значение, базовый тип данных которого находится ниже в иерархии, неявно приводится к другому типу данных, после чего производится сравнение.
  • При сравнении значений sql_variant типа данных char, varchar, nchar или nvarchar их параметры сортировки сначала сравниваются на основе следующих критериев: код языка, версия кода языка, флаги сравнения и идентификатор сортировки. Каждый из этих критериев сравнивается как целочисленное значение в приведенном порядке. Если все эти критерии равны, то сами строковые значения сравниваются в соответствии с параметрами сортировки.

Применение программы osql в интерактивном режиме

Чтобы использовать программу osql в интерактивном режиме, введите команду osql (и любые параметры) в командной строке.

Файл, содержащий запрос (например, Stores.qry), можно загрузить в программу osql и выполнить, введя команду следующего вида:

Можно считать запрос из файла (например, Titles.qry) и направить результаты в другой файл, введя команду, подобную следующей:

Важно!

По возможности используйте параметр -E(доверительное соединение).

При использовании программы osql в интерактивном режиме файл операционной системы можно считать в буфер команд с помощью команды :rимя_файла. Это приведет к отправке скрипта SQL в файле с именем имя_файла непосредственно на сервер в виде единого пакета.

Примечание

Если при использовании программы osql в файле скрипта SQL содержится разделитель пакетов GO, SQL Server воспринимает его как синтаксическую ошибку.

7 ответов

Лучший ответ

Пожалуйста, посмотрите, какую версию \ выпуск sql server (64 или 32bit) вы пытаетесь установить, какая у вас ОС?

И если у вас есть правильный .exe, щелкните правой кнопкой мыши и «запустите от имени администратора», я надеюсь, что этот вам поможет. :)

3

Christine
17 Июн 2016 в 03:52

Прежде всего, если у вас есть только Центр установки SQL, потому что вы устанавливаете SQL Server Management Studio (SSMS), вы не можете установить SQL Server. Вам понадобится файл образа SQL Server, например файл .iso.

Откройте файл .iso или извлеките его, запустите Центр установки SQL, щелкнув файл Setup.exe из папки в .iso (или в папке, извлеченной из .iso). Тогда он будет работать нормально.

Посетите https://social.msdn.microsoft.com/Forums/en-US/33153123-493e-4bfa-89a3-180c481b5fe4/lt-gt-sql- server-is-not-a-valid-installation-folder? forum = sqlgetstarted

2

Toshihiko
3 Окт 2018 в 02:10

Контекст: вы обновляете выпуск SQL Server 2019 с Express до Developer. Проблема в том, что «Центр установки SQL SERVER» -> Параметр -> «Выбрать корневой каталог установочного носителя» не обновлялся, и теперь в нем нет никакой папки.

Решение: вместо запуска «Центр установки SQL SERVER»

  1. Запустите exe-установщик, который вы скачали при первой установке.
  2. Затем выберите тип установки «Выборочная», после чего появится путь к «Местоположение носителя» (например: «C: \ SQL2019»). Внутри этого пути находится допустимая папка экземпляра (например, «C: \ SQL2019 \ ExpressAdv_ENU»).
  3. Закройте ваш exe-установщик и
  4. Наконец, попробуйте еще раз в «Центре установки SQL SERVER».

1

WalterAgile
9 Июн 2020 в 13:03

Я получил установку SQL Server 2012 из корпоративной системы самообслуживания. Запустите setup.exe от имени администратора и установите папку установочного носителя. Сообщение об ошибке сохраняется.

Скачал медиа прямо с MS и сравнил установочные папки.

В моем случае корпоративный push исключил файл MEDIAINFO.xml из установочного каталога. Копирование файла (из установки MS) в мою папку установки позволило использовать его в качестве папки установочного носителя. См. Изображение

1

DBNemetz
20 Фев 2017 в 22:47

Ах! Выявляется новая информация! Изначально мой .exe файл находился здесь:

Я только что переместил свой файл .exe в новое место, которое находится здесь:

Abd Abughazaleh
17 Фев 2020 в 07:46

Ваш центр установки SQL-сервера использует этот путь, который я показываю на моем изображении, это не работает это потому, что вы не используете настройку SQL Server. Используйте настройку, чтобы ввести здесь описание изображения

-1

Thabrew
30 Янв 2017 в 10:31

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: