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

Откуда:
Сообщений: 135
Уважаемые коллеги,
есть код:
declare @AllFieldsS_PRED varchar(8000)
exec spGetTableFieldsToString N's_pred',@AllFields_out=@AllFieldsS_PRED output
print @AllFieldsS_PRED

и есть собственно сама процедура:
ALTER PROCEDURE [dbo].[spGetTableFieldsToString] 
@tName varchar(50), @AllFields_out varchar(8000) output
AS
BEGIN

DECLARE @FieldName VARCHAR (50)
DECLARE @AllFields VARCHAR(8000)
	SET @AllFields='' 

DECLARE @SQLtext VARCHAR(8000)
DECLARE @ERRORtext VARCHAR(8000)

	SET @ERRORtext='Ошибка вставки данных в таблицы '
--курсор по именам полей в табл.
	 	DECLARE FieldCursor CURSOR FOR 
		SELECT syscolumns.name 
		FROM syscolumns 
                INNER JOIN (SELECT NAME, ID FROM sysobjects WHERE sysobjects.name=@tName ) AS SO ON syscolumns.ID = SO.ID 

		OPEN FieldCursor
		FETCH NEXT FROM FieldCursor INTO @FieldName

		WHILE @@FETCH_STATUS =0
		BEGIN
			IF (EXISTS
			(SELECT convert (sysname,case when t.xusertype > 255 then t.name
			else d.TYPE_NAME collate database_default end) TYPE_NAME
			FROM sysobjects o,master.dbo.spt_datatype_info d,systypes t,syscolumns c
                       	LEFT OUTER JOIN syscomments m on c.cdefault = m.id AND m.colid = 1
                	WHERE
	                o.name = @tName
					AND o.id = c.id
                	AND t.xtype = d.ss_dtype
                    AND c.length = isnull(d.fixlen, c.length)
	                AND (o.type not in ('P', 'FN', 'TF', 'IF') OR (o.type in ('TF', 'IF') and c.number = 0))
        	        AND isnull(d.AUTO_INCREMENT,0) = isnull(ColumnProperty (c.id, c.name, 'IsIdentity'),0)
                	AND c.xusertype = t.xusertype
                    AND c.name = @FieldName
	                AND (convert (sysname,case when t.xusertype > 255 then t.name
			                           else d.TYPE_NAME collate database_default
        	               			   end)) not like '%identity%'
                	))
			begin	
	            SET @AllFields = @AllFields + ',[' + @FieldName + ']'
			end
			FETCH NEXT FROM FieldCursor INTO @FieldName
		END

		CLOSE FieldCursor  
		DEALLOCATE FieldCursor  

		SET @AllFields=RIGHT(@AllFields, LEN(@AllFields)-1) 
return 

END


запрос вызывает хранимку и ... ничего не выдает, пишет, что запрос выполнен успешно ...
если хранимку переделать запросом и запускать, то выдает строку с перечислением полей ... всех без ошибки ...
мне надо в конечном итоге вызвать процедуру и передать перечень полей в .net приложение
где-то я ошибаюсь, но не могу понять в чом ... подскажите, пожалуйста,
заранее спасибо ...
27 авг 14, 12:53    [16499721]     Ответить | Цитировать Сообщить модератору
 Re: почему процедура не возвращает строку ..?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
SerRock,

а где Вы задаёте значение параметру @AllFields_out ?
27 авг 14, 12:58    [16499763]     Ответить | Цитировать Сообщить модератору
 Re: почему процедура не возвращает строку ..?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
iap
SerRock,

а где Вы задаёте значение параметру @AllFields_out ?
А кроме того, какой-то у Вас корявый JOIN с подзапросом
и зачем нужны выражения в SELECT для EXISTS ?
27 авг 14, 12:59    [16499779]     Ответить | Цитировать Сообщить модератору
 Re: почему процедура не возвращает строку ..?  [new]
SerRock
Member

Откуда:
Сообщений: 135
iap,
ага, спасибо, промазал с присвоением ... теперь ок ...

а с запросом не заморачивался, взял готовую болванку и прикрутил ... надо бы проанализировать относительно Вашего замечания ... еще раз спасибо ...
27 авг 14, 13:18    [16499966]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить