Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sp_executesql с несколькими параметрами  [new]
olga zobkov
Member

Откуда: Israel
Сообщений: 140
есть хр проц
в которой выполняю:
ALTER PROCEDURE [dbo].[castdv_SP] 
@FIELD1 VARCHAR(10),
@FIELD2 VARCHAR(10),
@FIELD3 VARCHAR(10),
@FIELD4 VARCHAR(10),
@FIELD5 VARCHAR(10),
@VAR1F VARCHAR(10),
@VAR1T VARCHAR(10),
@VAR2F VARCHAR(10),
@VAR2T VARCHAR(10),
@VAR3F VARCHAR(10),
@VAR3T VARCHAR(10),
@VAR4F VARCHAR(10),
@VAR4T VARCHAR(10),
@VAR5F VARCHAR(10),
@VAR5T VARCHAR(10)

AS
BEGIN
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition1  nvarchar(500);
DECLARE @ParmDefinition2  nvarchar(500);
DECLARE @ParmDefinition3  nvarchar(500);
DECLARE @IntVariable1 nvarchar(20);
DECLARE @IntVariable2 nvarchar(20);
DECLARE @IntVariable3 nvarchar(20);
	SET @SQLString =
     N'select POPLPN  from MVXPROD.MVXJDTA.MPOPLP inner join MVXPROD.MVXJDTA.MITMAS on MMCONO =POCONO and POITNO =MMITNO where @Parm1 between @Parm2 and @Parm3 ';
SET @ParmDefinition1 = N'@Parm1 nvarchar(20)';
SET @ParmDefinition2 = N'@Parm2 nvarchar(20)';
SET @ParmDefinition3 = N'@Parm3 nvarchar(20)';
set @IntVariable1=@FIELD1;
set @IntVariable2= @VAR1F;
set @IntVariable3=@VAR1T;
	 
	BEGIN
EXECUTE sp_executesql @SQLString, @ParmDefinition1,@ParmDefinition2,@ParmDefinition3, @Parm1 = @IntVariable1, @Parm2 = @IntVariable2, @Parm3 = @IntVariable3;

	END


обращаюсь к ней:
	declare @a1 varchar(10)
	declare @a2 varchar(10)

		set @a1 ='3150007378'
	set @a2= '3150007378'
	EXEC  [dbo].[castdv_SP] 'POITNO','','','','',@a1,@a2,'','','','','','','',''     


при обращении к ней вот что выскакивает

Must declare the scalar variable "@Parm2".

помогите!

Сообщение было отредактировано: 28 мар 13, 12:52
28 мар 13, 12:39    [14106552]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
olga zobkov,


http://msdn.microsoft.com/ru-ru/library/ms188001.aspx
sp_executesql [ @stmt = ] statement
[
{ , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' }
{ , [ @param1 = ] 'value1' [ ,...n ] }
]

[ @params= ] N'@parameter_namedata_type [ ,... n ] '

Is one string that contains the definitions of all parameters
28 мар 13, 12:41    [14106568]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
Glory
Member

Откуда:
Сообщений: 104760
olga zobkov
помогите!

Надо просто взять синтаксис из хелпа.
А не придумывать самому.
28 мар 13, 12:43    [14106576]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
Гость333
Member

Откуда:
Сообщений: 3683
olga zobkov,

DECLARE @ParmDefinition1 nvarchar(500);
DECLARE @ParmDefinition2 nvarchar(500);
DECLARE @ParmDefinition3 nvarchar(500);

...
SET @ParmDefinition1 = N'@Parm1 nvarchar(20), @Parm2 nvarchar(20), @Parm3 nvarchar(20)';
SET @ParmDefinition2 = N'@Parm2 nvarchar(20)';
SET @ParmDefinition3 = N'@Parm3 nvarchar(20)';

...
EXECUTE sp_executesql @SQLString, @ParmDefinition1, @ParmDefinition2,@ParmDefinition3, @Parm1 = @IntVariable1, @Parm2 = @IntVariable2, @Parm3 = @IntVariable3;
28 мар 13, 12:49    [14106613]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
olga zobkov
Member

Откуда: Israel
Сообщений: 140
всем спасибо
дошла сама до этого но теперь другая заморочка
выдает пустой сет если запускаю из хп
а так есть значения
28 мар 13, 13:18    [14106839]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
Glory
Member

Откуда:
Сообщений: 104760
olga zobkov
выдает пустой сет если запускаю из хп
а так есть значения

Откуда вы знаете, что значения есть, если ваш же запрос "выдает пустой сет " ?
28 мар 13, 13:20    [14106857]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
olga zobkov
Member

Откуда: Israel
Сообщений: 140
olga zobkov
всем спасибо
дошла сама до этого но теперь другая заморочка
выдает пустой сет если запускаю из хп
а так есть значения


вот так:
EXEC [dbo].[castdv_SP_1] 'POITNO','','','','','3450000194','3450000194','','','','','','','','' --дает пустой сет
select POPLPN from MVXPROD.MVXJDTA.MPOPLP inner join MVXPROD.MVXJDTA.MITMAS on MMCONO =POCONO and POITNO =MMITNO where POITNO between '3450000194' and '3450000194' --дает 14 значений
28 мар 13, 13:20    [14106858]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
SET @SQLString =
     N'select POPLPN  from MVXPROD.MVXJDTA.MPOPLP inner join MVXPROD.MVXJDTA.MITMAS on MMCONO =POCONO and POITNO =MMITNO where ' + @Parm1 + ' between @Parm2 and @Parm3 ';

и передавать @Parm1 в sp_executesql не надо.
28 мар 13, 13:29    [14106918]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
Glory
Member

Откуда:
Сообщений: 104760
olga zobkov
select POPLPN from MVXPROD.MVXJDTA.MPOPLP inner join MVXPROD.MVXJDTA.MITMAS on MMCONO =POCONO and POITNO =MMITNO where POITNO between '3450000194' and '3450000194' --дает 14 значений

Т.е. вы считате, что
where @Parm1 between @Parm2 and @Parm3 из динамического запроса соответствует вашему
where POITNO between '3450000194' and '3450000194'

??
28 мар 13, 13:32    [14106938]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
olga zobkov
Member

Откуда: Israel
Сообщений: 140
Glory,да потому что я передаю @FIELD1 VARCHAR(10), это POITNO


@VAR1F VARCHAR(10),
@VAR1T VARCHAR(10),
это мои значения
а потом
set @IntVariable1=@FIELD1;
set @IntVariable2= @VAR1F;
set @IntVariable3=@VAR1T;
28 мар 13, 13:40    [14107007]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
olga zobkov
Member

Откуда: Israel
Сообщений: 140
olga zobkov
Glory,да потому что я передаю @FIELD1 VARCHAR(10), это POITNO


@VAR1F VARCHAR(10),
@VAR1T VARCHAR(10),
это мои значения
а потом
set @IntVariable1=@FIELD1;
set @IntVariable2= @VAR1F;
set @IntVariable3=@VAR1T;


и вообще я упростила ХР:

ALTER PROCEDURE [dbo].[castdv_SP_1]
@FIELD1 VARCHAR(20),
@FIELD2 VARCHAR(10),
@FIELD3 VARCHAR(10),
@FIELD4 VARCHAR(10),
@FIELD5 VARCHAR(10),
@VAR1F VARCHAR(20),
@VAR1T VARCHAR(20),
@VAR2F VARCHAR(10),
@VAR2T VARCHAR(10),
@VAR3F VARCHAR(10),
@VAR3T VARCHAR(10),
@VAR4F VARCHAR(10),
@VAR4T VARCHAR(10),
@VAR5F VARCHAR(10),
@VAR5T VARCHAR(10)

AS
BEGIN


DECLARE @SQLString nvarchar(1000);
DECLARE @ParmDefinition1 nvarchar(500);

SET @SQLString =
N'select POPLPN from MVXPROD.MVXJDTA.MPOPLP inner join MVXPROD.MVXJDTA.MITMAS on MMCONO =POCONO and POITNO =MMITNO where @Parm1 between @Parm2 and @Parm3 ';
SET @ParmDefinition1 = N'@Parm1 varchar(20),@Parm2 varchar(20),@Parm3 varchar(20)';
IF @FIELD2 =''
BEGIN
EXECUTE sp_executesql @SQLString, @ParmDefinition1, @Parm1 = @FIELD1, @Parm2 = @VAR1F, @Parm3 = @VAR1T;

END




END
28 мар 13, 13:44    [14107041]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
Гость333
Member

Откуда:
Сообщений: 3683
olga zobkov,

Ваше условие:
where @Parm1 between @Parm2 and @Parm3
при передаче параметров POITNO, 3450000194, 3450000194 будет эквивалентно такому:
where 'POITNO' between '3450000194' and '3450000194'

Как говорится, найдите десять отличий с желаемым:
where POITNO between '3450000194' and '3450000194'
28 мар 13, 13:45    [14107048]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
Glory
Member

Откуда:
Сообщений: 104760
olga zobkov
Glory,да потому что я передаю @FIELD1 VARCHAR(10), это POITNO

Передавать - мало
Нужно еще понимать разницу именем поля и строкой с именем поля
28 мар 13, 13:47    [14107051]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
olga zobkov
Member

Откуда: Israel
Сообщений: 140
Гость333,

ребята спасибо большое
28 мар 13, 13:48    [14107058]     Ответить | Цитировать Сообщить модератору
 Re: sp_executesql с несколькими параметрами  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034
olga zobkov,

имена таблиц, полей и т.д. нельзя субституировать при помощи переменных
вам необходимо формировать текст запроса на основании имен полей, переданных в переменных и только потом передавать его в sp_executesql
28 мар 13, 13:49    [14107061]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить