Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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 — Помилка, помилка не запитується, але результат — фіксоване значення FiledName, що не відповідає вашим потрібним значенням.
exec('вибрати ' + @fname + ' з tableName') — зверніть увагу, що біля однієї лапки додається пробіл до і після знака плюс

Звісно, ви також можете змінити рядок у вигляді змінної
Оголосити @fname Вархар (20)
set @fname = 'FiledName' --Встановити ім'я поля

Оголосити @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)

--як передати результат виконавчого виконавця у змінну?

Оголосити @num інтелект, @sqls Нварчар (4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num вихід
Вибрати @num


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

2: При використанні імен полів, таблиць, імен баз даних тощо як змінних необхідно використовувати динамічний SQL

    Помилка: оголосити @fname варчар(20)
                set @fname = 'FileName'
                Виберіть @fname з tableName — Помилка, помилка не запитується, але результат — фіксоване значення FiledName, що не відповідає вашим потрібним значенням.
    Правильно: Exec('вибрати ' + @fname + ' з tableName') — зверніть увагу на додавання пробілу збоку від однієї лапки до і після плюс

    Звісно, ви також можете змінити рядок у вигляді змінної
                Оголосити @fname Вархар (20)
                set @fname = 'FiledName' --Встановити ім'я поля

                Оголосити @s Варчар (1000)
                set @s = 'вибрати ' + @fname + ' з tableName'
                Exec(@s) -- Успіх
                Виконавчий sp_executesql @s — Це речення повідомить про помилку

              --Примітка: @s параметр має бути типу ntext або nchar або nvarchar, декларуйте @s varchar(1000) потрібно змінити на @s nvarchar(1000)



               А саме:
                оголосити @s Nvarchar(1000) — зверніть увагу, що тут змінено на nvarchar(1000).

                set @fname = 'FiledName' --Встановити ім'я поля
                set @s = 'вибрати ' + @fname + ' з tableName'
                Exec(@s) -- Успіх   
                Виконавчий sp_executesql @s — це речення правильне

3. Параметри введення або виведення

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

          Встановити @QueryString='Вибрати * з назви таблиці, де 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 type, а не varchar)
          Declare @input_id int — визначає значення параметра, який потрібно передати у динамічний оператор, параметр 1
          Declare @input_name varchar(20) — визначає значення аргументу, який потрібно передати у динамічний оператор, параметр 2

          Встановити @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)
        --як передати результат виконавчого виконавця у змінну?         
        declare @QueryString nvarchar(1000) — змінна з назвою динамічного запиту (Примітка: має бути ntext або nchar nvarchar type, а не varchar type)
        Оголосити @paramstring nvarchar(200) — встановити рядок параметрів у динамічному операторі (примітка: має бути ntext або nchar nvarchar type, а не varchar)
        Declare @output_result int — результат запиту призначається @output_result

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

        declare @QueryString nvarchar(1000) — змінна з назвою динамічного запиту (Примітка: має бути ntext або nchar nvarchar type, а не varchar type)
        Set @QueryString='Вибрати * з назви таблиці '
        вставити у #tmp(поле1,поле2,...) exec(@querystirng)




Попередній:Метод SQL для спорожнення даних таблиці
Наступний:SQL-нотатки з останніх днів
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com