Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 11240|Odpowiedź: 0

[Źródło] Zwykłe instrukcje SQL mogą być wykonywane za pomocą exec

[Skopiuj link]
Opublikowano 09.02.2015 14:44:30 | | |
1: Zwykłe instrukcje SQL mogą być wykonywane za pomocą exec

Wybierz * z tabeli Nazwa
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- Należy zauważyć, że musisz dodać N przed ciągiem

2: Przy użyciu nazw pól, tabel, nazw baz danych itp. jako zmiennych, należy stosować dynamiczne SQL

Deklaruj @fname varchar(20)
set @fname = 'FiledName'
Wybierz @fname z tableName – Błąd, nie pojawia się żaden błąd, ale wynik to stała wartość FiledName, co nie jest tym, czego chcesz.
exec('select ' + @fname + ' z tableName') -- zwróć uwagę, że do boku pojedynczego cudzysłowu dodaje się spację przed i za znakiem plus

Oczywiście możesz też zmienić łańcuch na postać zmiennej
Deklaruj @fname varchar(20)
ustaw @fname = 'FiledName' --Ustaw nazwę pola

Deklaruj @s Varchara (1000)
zestaw @s = 'wybierz ' + @fname + ' z tableName'
exec(@s) -- sukces
wykonawczy sp_executesql @s -- To zdanie zgłosi błąd

deklaruj @s Nvarchar(1000) — zauważ, że tutaj zmieniono to na nvarchar(1000).
zestaw @s = 'wybierz ' + @fname + ' z tableName'
exec(@s) -- sukces
Wykonawczy sp_executesql @s -- to zdanie jest poprawne

3. Parametry wyjściowe
deklaruj @num int, @sqls Nvarchar (4000)
ustaw @sqls='wybierz count(*) z tableName'
exec(@sqls)

--jak umieścić wynik wykonania exec w zmiennej?

deklaruj @num int, @sqls Nvarchar (4000)
ustaw @sqls='wybierz @a=count(*) z tableName '
exec sp_executesql @sqls,N'@a int output',@num output
Wybierz @num


1: Zwykłe instrukcje SQL mogą być wykonywane za pomocą Exec Example: Wybierz * z tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName' -- Należy dodać N przed ciągiem

2: Przy użyciu nazw pól, tabel, nazw baz danych itp. jako zmiennych, należy stosować dynamiczne SQL

    Błąd: deklaruj @fname varchar(20)
                set @fname = 'FiledName'
                Wybierz @fname z tableName – Błąd, nie pojawia się żaden błąd, ale wynik to stała wartość FiledName, co nie jest tym, czego chcesz.
    Poprawnie: Exec('select ' + @fname + ' from tableName') -- zwróć uwagę na dodanie spacji obok pojedynczego cudzysłowu przed i po znaku plus

    Oczywiście możesz też zmienić łańcuch na postać zmiennej
                Deklaruj @fname varchar(20)
                ustaw @fname = 'FiledName' --Ustaw nazwę pola

                Deklaruj @s Varchara (1000)
                zestaw @s = 'wybierz ' + @fname + ' z tableName'
                Wykonawczy(@s) -- Sukces
                wykonawczy sp_executesql @s -- To zdanie zgłosi błąd

              --Uwaga: @s parametr musi mieć ntext, nchar lub nvarchar, deklaruj @s varchar(1000) musi zostać zmieniony na deklarować @s nvarchar(1000)



               Jak poniżej:
                deklaruj @s Nvarchar(1000) — zauważ, że tutaj zmieniono to na nvarchar(1000).

                ustaw @fname = 'FiledName' --Ustaw nazwę pola
                zestaw @s = 'wybierz ' + @fname + ' z tableName'
                Wykonawczy(@s) -- Sukces   
                Wykonawczy sp_executesql @s -- to zdanie jest poprawne

3. Parametry wejściowe lub wyjściowe

      (1) Parametry wejściowe:
          declare @QueryString nvarchar(1000) -- zmienna dynamicznego zapytania (uwaga: musi być ntext lub nchar nvarchar type, nie varchar)
          Declare @paramstring nvarchar(200) - ustaw ciąg parametrów w instrukcji dynamicznej (uwaga: musi być ntext lub nchar typu nvarchar, nie varchar)
          declare @input_id int - definiuje wartość parametrów, które mają być przekazane do instrukcji dynamicznej

          ustaw @QueryString='wybierz * z nazwy tabeli, gdzie id=@id' --id to nazwa pola, @id jest parametrem do przekazania
          set @paramstring='@id int' -- Ustawia ciąg definiujący parametry w instrukcji dynamicznej
          ustaw @input_id =1 -- Ustaw wartość parametru, który ma być przekazywany w instrukcji dynamicznej, na 1
          egzex sp_executesql @querystring,@paramstring,@id=@input_id
          Jeśli jest wiele parametrów:
          declare @QueryString nvarchar(1000) -- zmienna dynamicznego zapytania (uwaga: musi być ntext lub nchar nvarchar type, nie varchar)
          Declare @paramstring nvarchar(200) - ustaw ciąg parametrów w instrukcji dynamicznej (uwaga: musi być ntext lub nchar typu nvarchar, nie varchar)
          declare @input_id int - definiuje wartość parametru, który ma być przekazany do dynamicznego potwierdzenia, parametr 1
          declare @input_name varchar(20) - definiuje wartość argumentu, który ma być przekazany do dynamicznego zatwierdzenia, parametr 2

          ustaw @QueryString='wybierz * z nazwy tabeli, gdzie id=@id i nazwa=@name' --id i nazwa to nazwy pól, a @id i @name to parametry do przekazania
          ustaw @paramstring='@id int,@name varchar(20)' -- Ustaw ciąg definicji parametrów w instrukcji dynamicznej, oddzielony przez ","
          ustaw @input_id =1 -- Ustaw wartość parametru, który ma być przekazywany w instrukcji dynamicznej, na 1
          ustaw @input_name='Zhang San' --Ustaw wartość parametru, który ma być przekazany w instrukcji dynamicznej na 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Zwróć uwagę na kolejność argumentów
     (2) Parametry wyjściowe
             deklaruj @num int, @sqls Nvarchar (4000)
            ustaw @sqls='wybierz count(*) z tableName'
            exec(@sqls)
        --jak umieścić wynik wykonania exec w zmiennej?         
        declare @QueryString nvarchar(1000) -- dynamiczna zmienna nazwy zapytania (Uwaga: musi być ntext lub nchar nvarchar, nie varchar)
        Declare @paramstring nvarchar(200) - ustaw ciąg parametrów w instrukcji dynamicznej (uwaga: musi być ntext lub nchar typu nvarchar, nie varchar)
        deklaruj @output_result int – wynik zapytania jest przypisany do @output_result

        ustaw @QueryString='wybierz @totalcount=count(*) z nazwy tabeli' --@totalcount jest parametrem wyjściowym
        ustaw @paramstring='@totalcount int output' --Ustaw ciąg zdefiniowany przez parametry w instrukcji dynamicznej, oddzielony przez ","
        wynik sp_executesql @querystring, @paramstring, @totalcount=@output_result wyjście
        Wybierz @output_result
        Oczywiście parametry wejściowe i wyjściowe można używać razem, więc możesz wypróbować sam.
        Dodatkowo, jeśli chcesz wypisać zestaw wyników zapytania o polecenie dynamiczne, myślę tylko o następującej metodzie używania tabel tymczasowych, nie wiem, czy masz lepszy sposób.
        JEŚLI object_id('[tempdb].[ dbo].#tmp') NIE JEST NULL -- Sprawdź, czy tymczasowa tabela #tmp istnieje, a jeśli tak, usuń ją
            Drop table #tmp
        wybierz * do #tmp z nazwy tabeli, gdzie 1=2 — Stwórz tymczasową tabelę #tmp o tej samej strukturze co nazwa tabeli

        declare @QueryString nvarchar(1000) -- dynamiczna zmienna nazwy zapytania (Uwaga: musi być ntext lub nchar nvarchar, nie varchar)
        ustaw @QueryString='wybierz * z nazwy tabeli '
        wstaw do #tmp(field1,field2,...) exec(@querystirng)




Poprzedni:Metoda SQL do opróżniania danych tabelowych
Następny:Notatki SQL z ostatnich dni
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com