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

Откуда: Рига
Сообщений: 197
добрый день,
есть запрос

Declare @sql varchar(600)	
DECLARE @id numeric(18,0)
DECLARE @skait numeric(18,0)

Set @id = 1
Set @skait = 0

DECLARE @fix numeric(18,0)
DECLARE @groups numeric(18,0)		
DECLARE @grunts numeric(18,0)
DECLARE @liters numeric(18,0)
			 	    
DECLARE @dala varchar(600)
DECLARE @kadastrs varchar(600)		 
DECLARE @viss varchar(600)
DECLARE @monument_id numeric(6, 0)
DECLARE @get_data CURSOR
SET @get_data = CURSOR FOR
SELECT kadastrs, monument_id
FROM [VK_Monuments]


OPEN @get_data	--kursora atveershana
FETCH NEXT
FROM @get_data INTO @viss, @monument_id

WHILE @@FETCH_STATUS = 0	--cikls visu adreshu apstaigaashanai
BEGIN

 if @viss is not NULL begin
	SET @viss = replace(@viss,'  ',' ')
	Set @viss = REPLACE(@viss,',','')
	While (Charindex(';',@viss)>0)
	Begin
		Set @kadastrs = ltrim(rtrim(Substring(@viss,1,Charindex(';',@viss)-1)))
		/* print @kadastrs   */
		Set @viss = Substring(@viss,Charindex(';',@viss)+2,len(@viss))

	Set @id = @id + 1
	Set @sql = 'Insert into VK_Xref_Mon_Kad values('+ convert(nvarchar(18),@monument_id)

		Set @skait = 0
			While (Charindex(' ',@kadastrs)>0)
			Begin
			Set @skait = @skait + 1
				Set @dala = ltrim(rtrim(Substring(@kadastrs,1,Charindex(' ',@kadastrs)-1)))
				/* print '   '+@dala   */
				Set @dala = REPLACE(@dala,',','')
				Set @sql = @sql + ','+ @dala
				Set @kadastrs = Substring(@kadastrs,Charindex(' ',@kadastrs)+1,len(@kadastrs))



			End
			/* print '   '+@kadastrs */
			Set @kadastrs = REPLACE(@kadastrs,',','')
			Set @sql = @sql + ','+ @kadastrs
			if @skait = 2 begin 
				set @sql = @sql + ',NULL' 
			end
			set @sql = @sql + ');'
		if @skait > 1 begin
			print @sql
		end
	End
	/* print ''+ @viss   */
	Set @kadastrs = @viss

	Set @id = @id + 1
	Set @sql = 'Insert into Table values('+ convert(nvarchar(18),@monument_id)
		 Set @skait = 0
	   		While (Charindex(' ',@kadastrs)>0)
			Begin
				Set @skait = @skait + 1
				Set @dala = ltrim(rtrim(Substring(@kadastrs,1,Charindex(' ',@kadastrs)-1)))
				/* print '   '+@dala  */
				Set @dala = REPLACE(@dala,',','')
				Set @sql = @sql + ','+ @dala
				Set @kadastrs = Substring(@kadastrs,Charindex(' ',@kadastrs)+1,len(@kadastrs))



			End
			/* print '   '+@kadastrs */
   			Set @kadastrs = REPLACE(@kadastrs,',','')
			Set @sql = @sql + ','+ @kadastrs
			if @skait = 2 begin 
				set @sql = @sql + ',NULL' 
			end
			set @sql = @sql + ');'
		if @skait > 1 begin
			print @sql
		end
  end
FETCH NEXT
FROM @get_data INTO @viss, @monument_id		--ieguust naakamos datus
END	--cikla beigas

на выходе получаем кучу строк такого типа:
Insert into Table  values(338,4601,011,2601,NULL);
Insert into Table   values(395,5094,004,0054,027);
Insert into Table   values(650,6264,007,0079,NULL);

при выполнении вставки в таблицу теряются нули, т.е. в таблице оказывается не 0054, а 54. пробовала менять типы данных в таблице, но итог все равно один и тот же.
что надо сделать, чтобы получить наобходимый результат?
5 ноя 09, 14:45    [7886293]     Ответить | Цитировать Сообщить модератору
 Re: при insert into теряются нули  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
Типы полей в таблице Table надо угадать?
5 ноя 09, 14:47    [7886304]     Ответить | Цитировать Сообщить модератору
 Re: при insert into теряются нули  [new]
Glory
Member

Откуда:
Сообщений: 104760
FATE


при выполнении вставки в таблицу теряются нули, т.е. в таблице оказывается не 0054, а 54. пробовала менять типы данных в таблице, но итог все равно один и тот же.
что надо сделать, чтобы получить наобходимый результат?

А как по-вашему, вообще в типе @monument_id numeric(6, 0) могут вообще быть какие-то "нули" впереди?
5 ноя 09, 14:48    [7886318]     Ответить | Цитировать Сообщить модератору
 Re: при insert into теряются нули  [new]
Supra93
Member

Откуда:
Сообщений: 8174
declare @monument_id numeric(6, 0)
set @monument_id = 000000000004
select @monument_id
Глаза об комментарии поломал, читал как транслит
5 ноя 09, 14:51    [7886339]     Ответить | Цитировать Сообщить модератору
 Re: при insert into теряются нули  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Вместо
convert(nvarchar(18),@monument_id)
попробуйте
REPLACE(STR(@monument_id,18),' ','0')
Но если вставка в нестроковые поля, то это не поможет.
5 ноя 09, 14:51    [7886342]     Ответить | Цитировать Сообщить модератору
 Re: при insert into теряются нули  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
iap
Вместо
convert(nvarchar(18),@monument_id)
попробуйте
REPLACE(STR(@monument_id,18),' ','0')
Но если вставка в нестроковые поля, то это не поможет.
А если в строковые, то у Вас не хватает одинарных кавычек и со скобками что-то не то, кстати:
Set @sql = 'Insert into VK_Xref_Mon_Kad values('''+replace(str(@monument_id,18),' ','0')+''')'
5 ноя 09, 14:58    [7886402]     Ответить | Цитировать Сообщить модератору
 Re: при insert into теряются нули  [new]
FATE
Member

Откуда: Рига
Сообщений: 197
2 iap
спасибо, не хватало кавычек для получения результата
Insert into VK_Xref_Mon_Kad values(4534,'0500','001','5103','001');
теперь все вставляется с нулями
5 ноя 09, 15:09    [7886494]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить