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

Вид: 11240|Ответ: 0

[Источник] Обычные SQL-операторы можно выполнять с помощью exec

[Скопировать ссылку]
Опубликовано 09.02.2015 14:44:30 | | |
1: Обычные SQL-операторы могут выполняться с exec

Выберите * из tableName
exec('выбрать * из tableName')
exec sp_executesql N'select * из tableName' — Обратите внимание, что нужно добавить N перед строкой

2: При использовании имён полей, таблиц, баз данных и т. д. в качестве переменных необходимо использовать динамический SQL

Объявить @fname Варчар(20)
set @fname = 'FileName'
Выберите @fname из tableName — Ошибка, ошибка не запрашивается, но результат — фиксированное значение FileName, что не соответствует вашему желанию.
exec('выбрать ' + @fname + ' из tableName') — обратите внимание, что к стороне единой кавычки добавляется пробел до и после знака плюс

Конечно, вы также можете изменить строку в форму переменной
Объявить @fname Варчар(20)
set @fname = 'FileedName' --Задать имя поля

Объявить @s Вархар (1000)
set @s = 'выбрать ' + @fname + ' из tableName'
exec(@s) -- успех
Исполнительный sp_executesql @s — В этом предложении будет обнаружена ошибка

объявить @s Nvarchar(1000) — обратите внимание, что здесь оно изменено на nvarchar(1000).
set @s = 'выбрать ' + @fname + ' из tableName'
exec(@s) -- успех
Исполнительный sp_executesql @s — это предложение верно

3. Параметры выхода
Объявить @num интеллект, @sqls Нварчар (4000)
set @sqls='выберите count(*) из tableName'
exec(@sqls)

--как ввести результат exec execution в переменную?

Объявить @num интеллект, @sqls Нварчар (4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
выберите @num


1: Обычные SQL-операторы можно выполнить с помощью Exec Пример: Select * из tableName
                Exec ('выбрать * из tableName')
                Exec sp_executesql N'select * из tableName' — Обратите внимание, что нужно добавить N перед строкой

2: При использовании имён полей, таблиц, баз данных и т. д. в качестве переменных необходимо использовать динамический SQL

    Ошибка: объявить @fname вархар(20)
                set @fname = 'FileName'
                Выберите @fname из tableName — Ошибка, ошибка не запрашивается, но результат — фиксированное значение FileName, что не соответствует вашему желанию.
    Верно: Exec('выбрать ' + @fname + ' из tableName') — обратите внимание на добавление пробела сбоку от одной кавычки до и после знака плюс

    Конечно, вы также можете изменить строку в форму переменной
                Объявить @fname Варчар(20)
                set @fname = 'FileedName' --Задать имя поля

                Объявить @s Вархар (1000)
                set @s = 'выбрать ' + @fname + ' из tableName'
                Исполнитель(@s) -- Успех
                Исполнительный sp_executesql @s — В этом предложении будет обнаружена ошибка

              --Примечание: @s параметр должен быть типа ntext, nchar или nvarchar, объявлять @s varchar(1000) должен быть изменен на @s nvarchar(1000)



               Следующим образом:
                объявить @s Nvarchar(1000) — обратите внимание, что здесь оно изменено на nvarchar(1000).

                set @fname = 'FileedName' --Задать имя поля
                set @s = 'выбрать ' + @fname + ' из tableName'
                Исполнитель(@s) -- Успех   
                Исполнительный sp_executesql @s — это предложение верно

3. Входные или выходные параметры

      (1) Входные параметры:
          Declare @QueryString nvarchar(1000) -- переменная оператора динамического запроса (примечание: должен быть ntext или nchar nvarchar type, а не varchar)
          Объявить @paramstring nvarchar(200) — задать строку параметров в динамическом операторе (примечание: должен быть тип ntext или nchar nvarchar, а не тип varchar)
          declare @input_id int — определяет значение параметров, которые нужно передавать в динамический оператор

          Установите @QueryString='Select * из названия таблицы, где id=@id' --id — имя поля, @id — параметр, который нужно передать
          set @paramstring='@id int' — Задаёт строку, определяющую параметры в динамическом операторе
          set @input_id =1 -- Установить значение параметра, передаваемого в динамическом операторе, в 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Если существует несколько параметров:
          Declare @QueryString nvarchar(1000) -- переменная оператора динамического запроса (примечание: должен быть ntext или nchar nvarchar type, а не varchar)
          Объявить @paramstring nvarchar(200) — задать строку параметров в динамическом операторе (примечание: должен быть тип ntext или nchar nvarchar, а не тип varchar)
          Declare @input_id int — определяет значение параметра, который должен передаваться в динамический оператор, параметр 1
          Declare @input_name varchar(20) — определяет значение аргумента, который должен передаваться в динамический оператор, параметр 2

          Set @QueryString='Select * из tablename, где id=@id и name=@name' --id и name — это имена полей, а @id и @name — параметры для передачи
          set @paramstring='@id int,@name varchar(20)' -- Задайте строку определения параметров в динамическом операторе, разделённую ","
          set @input_id =1 -- Установить значение параметра, передаваемого в динамическом операторе, в 1
          set @input_name='Zhang San' --Задайте значение параметра, который должен передаваться в динамическом операторе в 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Обратите внимание на порядок аргументов
     (2) Параметры выхода
             Объявить @num интеллект, @sqls Нварчар (4000)
            set @sqls='выберите count(*) из tableName'
            exec(@sqls)
        --как ввести результат exec execution в переменную?         
        declare @QueryString nvarchar(1000) -- переменная с именем динамического запроса (Примечание: должен быть тип ntext или nchar nvarchar, а не тип varchar)
        Объявить @paramstring nvarchar(200) — задать строку параметров в динамическом операторе (примечание: должен быть тип ntext или nchar nvarchar, а не тип varchar)
        объявить @output_result int — результат запроса назначается @output_result

        Set @QueryString='выберите @totalcount=count(*) из названия таблицы' --@totalcount — выходной параметр
        set @paramstring='@totalcount int output' --Установите строку, определённую параметрами в динамическом операторе, разделённую ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
        Выберите @output_result
        Конечно, входные и выходные параметры можно использовать вместе, так что вы можете попробовать сами.
        Кроме того, если вы хотите вывести набор результатов динамического запроса операторов, я думаю только о следующем методе использования временных таблиц, не знаю, есть ли у вас лучший способ.
        ЕСЛИ object_id('[tempdb].[ dbo].#tmp') НЕ ЯВЛЯЕТСЯ NULL — Определите, существует ли временная таблица #tmp, и если да, удалите её
            Drop Table #tmp
        выберите * в #tmp из tablename, где 1=2 -- Создать временную таблицу #tmp с той же структурой, что и tablename

        declare @QueryString nvarchar(1000) -- переменная с именем динамического запроса (Примечание: должен быть тип ntext или nchar nvarchar, а не тип varchar)
        Set @QueryString='Select * из названия таблицы '
        Вставить в #tmp(поле1,поле2,...) exec(@querystirng)




Предыдущий:Метод SQL-системы опорожнения данных таблицы
Следующий:Заметки по SQL за последние дни
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com