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) |