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

Откуда:
Сообщений: 22
use tp
go
CREATE PROCEDURE ProcAnaliz
 @Nomer decimal(2,0) 
AS
begin
declare
	@nameTable varchar (100)
	Set @nameTable = 
(Select Distinct rtrim(type_st)+rtrim(Convert(varchar(10),station)) +'_'+rtrim(Convert(varchar(10),port)) as tabName
from sprsch 
where nomer = @Nomer)
declare  @SQL varchar (250)
Set @SQL  = 'SELECT * FROM ' + @nameTable 
end
exec  ProcAnaliz 5	

Есть входной параметр, где указывается номер строки, по этому номеру выбирается строка, где складываются значения из разных полей, затем эта сумма полей(результат будет - название таблицы), должна помещаться в переменную, и затем нужно сделать SELECT * FROM (@имя_переменной), но так не получается пришлось так как указано выше, но это как то не работает, компилируется нормально но при запуске процедуры пишет "выполнение команды успешно завершено", хотя на выходе должна появится выборка таблицы. Что может в этом запросе быть не так?
21 дек 11, 15:38    [11803950]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Elena85
Member

Откуда:
Сообщений: 34
VDionisV, чтобы на выходе появился результат, нужно не только сгенерить динамический sql, но и выполнить его. Добавьте
exec(@SQL) 
после строки
Set @SQL  = 'SELECT * FROM ' + @nameTable 
21 дек 11, 15:47    [11804034]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
EXECUTE sp_executesql @SQL
21 дек 11, 15:48    [11804050]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
Блин, второй день мучаюсь, а оказалось все так просто))) Спасибо !!!
21 дек 11, 15:53    [11804092]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
use tp
go
IF object_id('ProcAnaliz','P') is not null
	drop procedure ProcAnaliz
GO
CREATE PROCEDURE ProcAnaliz
@Nomer decimal(2,0),
@datas varchar(20)
AS
begin
declare
	@nameTable varchar (100),
	@SQL varchar (500),
	@SQLL varchar (1000),
	@SQLWhere varchar(100)
	Set @nameTable =
(Select Distinct rtrim(type_st)+rtrim(Convert(varchar(10),station)) +'_'+rtrim(Convert(varchar(10),port)) as tabName
from sprsch  
where nomer = @Nomer) 

Set @SQL  = 'SELECT * FROM ' + @nameTable 
SET @SQLWhere = 'sernomer =' + @datas
SET @SQLL= @SQL+'Where'+ @SQLWhere
exec (@SQLL)
end
exec  ProcAnaliz 10,@datas = '3254'

Не подскажите в чем тут может быть ошибка, может опять наступаю на те же грабли, но уже всячески пробовал, работать не хочет, суть задачи таже что и описывал в прежних постах только теперь нужно добавить фильтр, вроде все правильно, компилируется правильно, только почему то пишет при выполнении Incorrect syntax near '='. и это ошибка выводится много раз и в конце Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32). Не пойму в чем ошибка, вложений не много же.
22 дек 11, 12:39    [11808372]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104751
VDionisV
компилируется правильно, только почему то пишет при выполнении Incorrect syntax near '='.

Потому что смешаны форматы передачи параметров в процедуру
Параметры в процедуры передаются либо все с именем параметра, либо по порядку объявления
22 дек 11, 12:42    [11808409]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
передал в процедуру как надо
exec  ProcAnaliz @Nomer=10,@datas = '3254'

Результат тот же....(((
22 дек 11, 13:09    [11808640]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104751
Приведенный вами скрипт не выдает никаких ошибок
22 дек 11, 13:11    [11808671]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
use tp
go
IF object_id('ProcAnaliz','P') is not null
	drop procedure ProcAnaliz
GO
CREATE PROCEDURE ProcAnaliz
@Nomer decimal(2,0),
@datas varchar(20)
AS
begin
declare
	@nameTable varchar (100),
	@SQL varchar (500),
	@SQLL varchar (1000),
	@SQLWhere varchar(100)
	Set @nameTable =
(Select Distinct rtrim(type_st)+rtrim(Convert(varchar(10),station)) +'_'+rtrim(Convert(varchar(10),port)) as tabName
from sprsch  
where nomer = @Nomer) 

Set @SQL  = 'SELECT * FROM ' + @nameTable 
SET @SQLWhere = 'sernomer =' + @datas
SET @SQLL= @SQL+'Where'+ @SQLWhere
exec (@SQLL)
end
exec  ProcAnaliz 10,@datas = '3254'


Ошибка при выполнение :
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Сообщение 217, уровень 16, состояние 1, процедура ProcAnaliz, строка 19
Maximum stored procedure, function, trigger, or view nesting level exceeded (limit 32).
22 дек 11, 13:25    [11808837]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104751
Еше раз.
Этот скрипт не может выдавать сообщение.
Потому что это только скрипт создания процедуры.
Кстати в него попал и вызов самой процедуры. Это вы специально рекурсия организовали ?
22 дек 11, 13:28    [11808874]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
Да это я потом отделю, я пока практикуюсь чтоб заработало, выделяешь нужный тебе код и SQL Server его выполняет , поэтому можно на это не обращать внимания
22 дек 11, 13:36    [11808952]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
При выполнении процедуры а не скрипта выявляются ошибки))
22 дек 11, 13:37    [11808968]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
т.е. при выполнении куска кода
exec  ProcAnaliz 10,@datas = '3254'
выдаются ошибки
22 дек 11, 13:41    [11809003]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104751
VDionisV
т.е. при выполнении куска кода
exec  ProcAnaliz 10,@datas = '3254'

выдаются ошибки

Еще раз про формат передачи параметров в процедуры

@ parameter
Is the parameter for module_name, as defined in the module. Parameter names must be preceded by the at sign (@). When used with the @parameter_name=value form, parameter names and constants do not have to be supplied in the order in which they are defined in the module. However, if the @parameter_name=value form is used for any parameter, it must be used for all subsequent parameters.
22 дек 11, 13:44    [11809037]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
@ parameter
Is the parameter for module_name, as defined in the module. Parameter names must be preceded by the at sign (@). When used with the @parameter_name=value form, parameter names and constants do not have to be supplied in the order in which they are defined in the module. However, if the @parameter_name=value form is used for any parameter, it must be used for all subsequent parameters.[/quot]
However, if the @parameter_name=value form is used for any parameter, it must be used for all subsequent parameters.
Можно и так делать exec ProcAnaliz 10,@datas = '3254' и так exec ProcAnaliz @Nomer10,@datas = '3254', в данный момент разницы нет, все равно не работает, дело в самом скрипте, а что именно я не вижу
22 дек 11, 13:50    [11809085]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
VDionisV
Можно и так делать exec ProcAnaliz 10,@datas = '3254' и так exec ProcAnaliz @Nomer10,@datas = '3254', в данный момент разницы нет, все равно не работает, дело в самом скрипте, а что именно я не вижу

Дело в том что ни первый ни второй вариант не верны!
-- 1 вариант:
exec ProcAnaliz @Nomer = 10, @datas = '3254'
-- 2 вариант:
exec ProcAnaliz 10, '3254'
22 дек 11, 13:56    [11809151]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
А как правильно???
22 дек 11, 14:00    [11809179]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
VDionisV,

Как написано в сообщении выше
22 дек 11, 14:03    [11809201]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Гость333
Member

Откуда:
Сообщений: 3683
VDionisV
Set @SQL  = 'SELECT * FROM ' + @nameTable 
SET @SQLWhere = 'sernomer =' + @datas
SET @SQLL= @SQL+'Where'+ @SQLWhere

Похоже, у Вас всё лепится в одну строку без пробелов:
SELECT * FROM nameTableWheresernomer = 3254

Совет: при отладке динамического SQL добавляйте команду "PRINT @SQLL", тогда будет гораздо проще отлавливать синтаксические ошибки.
22 дек 11, 14:06    [11809226]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104751
VDionisV
А как правильно???

Для начала понять, что скрипт
CREATE PROCEDURE ProcAnaliz
@Nomer decimal(2,0),
@datas varchar(20)
AS
begin
declare
	@nameTable varchar (100),
	@SQL varchar (500),
	@SQLL varchar (1000),
	@SQLWhere varchar(100)
	Set @nameTable =
(Select Distinct rtrim(type_st)+rtrim(Convert(varchar(10),station)) +'_'+rtrim(Convert(varchar(10),port)) as tabName
from sprsch  
where nomer = @Nomer) 

Set @SQL  = 'SELECT * FROM ' + @nameTable 
SET @SQLWhere = 'sernomer =' + @datas
SET @SQLL= @SQL+'Where'+ @SQLWhere
exec (@SQLL)
end
exec  ProcAnaliz 10,@datas = '3254'

Создает рекурсивную процедуру.
22 дек 11, 14:14    [11809300]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
Хорошо, спасибо, только все равно не работает((
22 дек 11, 14:22    [11809357]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Glory
VDionisV
А как правильно???

Для начала понять, что скрипт
...

Создает рекурсивную процедуру.

Ну вроде писал что выделяет только то что надо. А там, кто его знает. Не работает и все. Ни ошибок, ни кода, просто не работает ))
22 дек 11, 14:32    [11809438]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
VDionisV
Member

Откуда:
Сообщений: 22
вот сам скрипт:
CREATE PROCEDURE ProcAnaliz
@Nomer decimal(2,0)
AS
begin
declare
	@nameTable varchar (100),
	@SQL varchar (500),
	@SQLL varchar (1000),
	@SQLWhere varchar(100),
	@datas varchar(20)
	Set @datas=1212
	Set @nameTable =
(Select Distinct rtrim(type_st)+rtrim(Convert(varchar(10),station)) +'_'+rtrim(Convert(varchar(10),port)) as tabName
from sprsch 
where nomer = @Nomer) 
begin
Set @SQL  = 'SELECT * FROM ' + @nameTable 
end
begin
SET @SQLWhere = 'sernomer =' + @datas
end
begin
SET @SQLL= @SQL+'Where'+ @SQLWhere
print @sqll
exec (@SQLL)
end
end

Выполняю скрипт
 exec  ProcAnaliz  @nomer=10

в ответ выводится
 SELECT * FROM rtp8_3Wheresernomer =2950
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.
Извините если что не так было описано выше.
22 дек 11, 14:48    [11809601]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Glory
Member

Откуда:
Сообщений: 104751
SELECT * FROM rtp8_3Wheresernomer =2950

как вы думаете - это запрос синтаксически верен ?
22 дек 11, 14:53    [11809636]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с процедурой  [new]
Xordal
Member

Откуда: Таганрог
Сообщений: 536
Еще и ошибка от другого скрипта:
...
Set @datas=1212
...

 SELECT * FROM rtp8_3Wheresernomer =2950
Сообщение 102, уровень 15, состояние 1, строка 1
Incorrect syntax near '='.

22 дек 11, 15:07    [11809727]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить