2015-10-09 5 views
0

Я пытаюсь вставить несколько значений в таблицу с помощью инструкции EXECUTE.SQL Server INSERT INTO с использованием EXECUTE

Я нашел несколько примеров, однако они не отвечают на мой вопрос.

Примечание: источники, приведенные ниже, являются кодом процедуры. Все упомянутые переменные были объявлены и инициализированы.

Первый способ я пробовал:

enter image description here

результаты в:

Error: Procedure or function has too many arguments specified.

И я полностью понимаю, почему я получаю это. Потому что sp_executesql не позволяет иметь более 4 аргументов, и он не может распознать, что происходит где.

Вторая попытка (где я только хочу, чтобы получить выход с помощью выполнить запрос в переменную, а затем положить, что в таблицу):

enter image description here

И я получаю:

Must declare scalar variable "@crlf"

и фактически эта переменная объявлена ​​в верхней части этой процедуры, но для меня это не так понятно, почему она все еще жалуется ...

Каким будет наиболее подходящий способ получить оператор выполнения и число (дополнительное значение) в таблице?

+0

во второй части и в декларации ПОР вы не определяете @ crlf..то почему возникает ошибка. ОК. Вы хотите вставить с выводом exec, правильно? – Ajay2707

+0

@ Ajay2707, пожалуйста, не самый код в качестве изображений. –

+0

извините за недостаточную информацию, которую я предоставил. весь этот код находится в хранимой процедуре, а переменная '@ crlf' объявлена ​​в верхней части. И вот почему меня смущает ... –

ответ

0

В качестве единственного обходного пути я могу предложить использовать временную таблицу. Должно быть довольно просто:

SELECT TOP (0) column1 
INTO #TemporaryResults 
FROM [master].[dbo].[table_1]; 

INSERT INTO #TemporaryResults 
EXECUTE sp_executesql @sql, N'@object_id INT, @crlf CHAR(2)', @object_id, @crlf; 

INSERT INTO [master].[dbo].[table_1] (column1, column2) 
SELECT column1, 1 
FROM #TemporaryResults; 
  1. Создать копию column1 из [table_1] COLUMN1
  2. Вставка записей, производимых СП в него
  3. Вставка записей в реальной таблице
0

Пожалуйста попробуйте в соответствии со следующим примером

DECLARE @IntVariable int; 
DECLARE @SQLString nvarchar(500); 
DECLARE @ParmDefinition nvarchar(500); 
DECLARE @max_title varchar(30); 

SET @IntVariable = 197; 
SET @SQLString = N'SELECT @max_titleOUT = max(JobTitle) 
    FROM AdventureWorks2012.HumanResources.Employee 
    WHERE BusinessEntityID = @level'; 
SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT'; 

EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @[email protected]_title OUTPUT; 
SELECT @max_title; 

НАБЛЮДЕНИЯ

  1. SQL запрос необходим параметр @level, поэтому мы объявим его в качестве параметра

  2. снова SQL-запрос возвращает результат в @max_titleOUT. Поэтому мы также объявляем его параметром.поэтому окончательный список параметров

    SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT'; 
    
  3. теперь мы должны послать значение @level для динамического запроса, поэтому мы используем @level = @IntVariable, отправляющий значение @IntVariable в @level

  4. наконец @max_titleOUT = @max_title OUTPUT мы берем выходной динамический запрос, который сохраняет в @max_titleOUT, скопируйте значение @max_title