Запрос на EXECUTE sp_executesql - PullRequest
       0

Запрос на EXECUTE sp_executesql

0 голосов
/ 08 октября 2019

Я пытался заставить @sqlstring запускаться 3 раза, основываясь на месяцах, доступных из другого файла, и все эти результаты были объединены в #table.

  1. Когда я включил "memberid в ('00001', '00002', '00003')", появляется сообщение об ошибке "Неверный синтаксис рядом с '00001'".
  2. Когда я исключил memberid, появляется сообщение об ошибке: «Сообщение 214, Уровень 16, Состояние 3, Процедура sp_executesql, Строка 1 [Строка пакетного запуска 1268] Процедура ожидает параметр« @params »типа« ntext / nchar / nvarchar »."

Как исправить следующий запрос?

DECLARE @Month VARCHAR(2)
DECLARE @Month1 VARCHAR(2)
DECLARE @Month2 VARCHAR(2)
DECLARE @Month3 VARCHAR(2)
DECLARE @Year VARCHAR(4)
DECLARE @Year1 VARCHAR(4)
DECLARE @Year2 VARCHAR(4)
DECLARE @Year3 VARCHAR(4)
DECLARE @SQLSTRING NVARCHAR(MAX)

SET @MONTH1 = N'SELECT MONTH FROM #period WHERE ROW = 1' 
SET @MONTH2 = N'SELECT MONTH FROM #period WHERE ROW = 2' 
SET @MONTH3 = N'SELECT MONTH FROM #period WHERE ROW = 3' 
SET @YEAR1 = N'SELECT YEAR FROM #period WHERE ROW = 1' 
SET @YEAR2 = N'SELECT YEAR FROM #period WHERE ROW = 2' 
SET @YEAR3 = N'SELECT YEAR FROM #period WHERE ROW = 3' 

SET @SQLSTRING = N'select memberid, sales, @MONTH as month, @YEAR as svyear
from member@Month where month = @month and memberid in ('00001', '00002','00003')'


INSERT INTO #table
EXECUTE sp_executesql @SQLSTRING, @MONTH=@MONTH1, @YEAR=@YEAR1
INSERT INTO #table
EXECUTE sp_executesql @SQLSTRING, @MONTH=@MONTH2, @YEAR=@YEAR2
INSERT INTO #table
EXECUTE sp_executesql @SQLSTRING, @MONTH=@MONTH3, @YEAR=@YEAR3;

1 Ответ

0 голосов
/ 08 октября 2019

Прежде всего, вам нужно создать временную таблицу. Ваша вставка в временную таблицу должна быть в вашем sql-запросе.

Затем используйте ваш запрос с escape-символом, например так:

SET @SQLSTRING = N'INSERT INTO #table
select memberid, sales, @MONTH as month, @YEAR as svyear
from member where month = @MONTH and memberid in (''00001'', ''00002'',''00003'')'

и, наконец, вызовите функцию:

DECLARE @sParams nvarchar(512) = '@MONTH VARCHAR(2), @YEAR VARCHAR(4)';

EXEC sp_executesql @SQLSTRING, @sParams, @MONTH, @YEAR;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...