Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 11240|Отговор: 0

[Източник] Обикновените SQL оператори могат да се изпълняват с exec

[Копирай линк]
Публикувано в 9.02.2015 г. 14:44:30 ч. | | |
1: Обикновени SQL оператори могат да се изпълняват с exec

Изберете * от tableName
exec('select * from tableName')
exec sp_executesql N'select * от tableName' -- Обърнете внимание, че трябва да добавите N преди низа

2: Когато се използват имена на полета, таблици, имена на бази данни и др. като променливи, трябва да се използва динамичен SQL

Declare @fname Varchar(20)
set @fname = 'FileName'
Изберете @fname от tableName -- Грешка, не се появява грешка, но резултатът е фиксирана стойност FiledName, което не е това, което искате.
exec('select ' + @fname + ' от tableName') -- обърнете внимание, че се добавя празни интервал отстрани на единичната кавичка преди и след плюс знака

Разбира се, можеш също да промениш струната във формата на променлива
Declare @fname Varchar(20)
set @fname = 'FiledName' --Задайте името на полето

Обяви @s Вархар (1000)
set @s = 'select ' + @fname + ' от tableName'
exec(@s) -- успех
изпълнителен sp_executesql @s -- Това изречение ще докладва грешка

обявете @s Nvarchar(1000) – обърнете внимание, че тук е променено на nvarchar(1000).
set @s = 'select ' + @fname + ' от tableName'
exec(@s) -- успех
Изпълнителен sp_executesql @s -- Това изречение е вярно

3. Параметри на изхода
Обяви @num интелигент, @sqls Нварчар(4000)
set @sqls='select count(*) from 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 -- Грешка, не се появява грешка, но резултатът е фиксирана стойност FiledName, което не е това, което искате.
    Правилно: Exec('select ' + @fname + ' от tableName') — обърнете внимание на добавянето на интервал отстрани на единичната кавичка преди и след плюс знака

    Разбира се, можеш също да промениш струната във формата на променлива
                Declare @fname Varchar(20)
                set @fname = 'FiledName' --Задайте името на полето

                Обяви @s Вархар (1000)
                set @s = 'select ' + @fname + ' от tableName'
                Изпълнител(@s) -- Успех
                изпълнителен sp_executesql @s -- Това изречение ще докладва грешка

              --Забележка: параметърът @s трябва да е от тип ntext или nchar или nvarchar, обявявайте @s varchar(1000) трябва да бъде променена да декларира @s nvarchar(1000)



               Както следва:
                обявете @s Nvarchar(1000) – обърнете внимание, че тук е променено на nvarchar(1000).

                set @fname = 'FiledName' --Задайте името на полето
                set @s = 'select ' + @fname + ' от tableName'
                Изпълнител(@s) -- Успех   
                Изпълнителен sp_executesql @s -- Това изречение е вярно

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

      (1) Входни параметри:
          Declare @QueryString nvarchar(1000) -- динамична променлива за заявки (забележка: трябва да е ntext или nchar тип nvarchar, не тип 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, не тип varchar)
          Обявете @paramstring nvarchar(200) - Задайте низа от параметри в динамичното изявление (забележка: трябва да е ntext или nchar nvarchar тип, не varchar тип)
          declare @input_id int - определя стойността на параметъра, който трябва да бъде прехвърлен в динамичното изявление, параметър 1
          Declare @input_name varchar(20) - определя стойността на аргумента, който трябва да бъде прехвърлен в динамичното изявление, параметър 2

          Задайте @QueryString='Select * от името на таблицата, където 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='select count(*) from tableName'
            exec(@sqls)
        --как да поставя резултата от exec execution в променлива?         
        declare @QueryString nvarchar(1000) -- динамична променлива с име на заявка (Забележка: трябва да е ntext или nchar nvarchar тип, не varchar тип)
        Обявете @paramstring nvarchar(200) - Задайте низа от параметри в динамичното изявление (забележка: трябва да е ntext или nchar nvarchar тип, не 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
        Изберете @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 * from tablename '
        Вмъкнете в #tmp(поле1,поле2,...) exec(@querystirng)




Предишен:SQL метод за изпразване на данните от таблицата
Следващ:SQL бележки от последните дни
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com