Вопрос: Какие вам дают вопросы на собеседовании?

Лучший ответ: Один случай - вообще не показателен.
Бывают ошибки, бывают случайности, бывают неадекватные задания.
На этой фирме свет не сошелся. Забейте и шлите резюме на другие вакансии.

Худший ответ: А теперь все одной процедурой и без временных таблиц как хотели многие :) ... IF OBJECT_ID ( '_data_look', 'P' ) IS NOT NULL 
    DROP PROCEDURE _data_look;
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE _data_look (@item int,@item_in int,@item_out int,@v int,@x nvarchar(max))
AS 
BEGIN
if @x = 'движение'
	if 	(@item_in <> @item_out) and (@item_in + @item_out > 0) and (@v >= 0)
	begin
	DECLARE @follow	int
	SET @follow = 	(
						case 
							when @item_in = 0 and  @item_out > 0 then  1
							when @item_in > 0 and  @item_out = 0 then -1
							when @item_in > 0 and  @item_out > 0 then  0
						end
					)
		if @follow = 1
				if (select SUM(Количество) from _Размещение where Место = @item_out) is null
					begin
					BEGIN  TRANSACTION;
						insert into _Движение   values (@item,@item_in,@item_out,@v)
						insert into _Размещение values (@item,@item_out,@v)
					COMMIT TRANSACTION;		
					end
				else
					begin
					BEGIN  TRANSACTION;
						insert into _Движение   values (@item,@item_in,@item_out,@v)
						update _Размещение
						set Количество = Количество + @v
						where Место = @item_out
					COMMIT TRANSACTION;	
					end
			if @follow = -1
				if (select SUM(Количество) from _Размещение where Место = @item_in) is null return;
				else
				begin
					if (select Количество  - @v from _Размещение where Место = @item_in) < 0 return;
					BEGIN  TRANSACTION;
						insert into _Движение   values (@item,@item_in,@item_out,@v)
						update _Размещение
						set Количество = Количество - @v
						where Место = @item_in
					COMMIT TRANSACTION;	
				end
			if @follow = 0
				if (select SUM(Количество) from _Размещение where Место = @item_in) is null or (select Количество - @v from _Размещение where Место = @item_in) < 0  return;
				else
				begin
				if (select SUM(Количество) from _Размещение where Место = @item_out) is null 
					begin 
					BEGIN  TRANSACTION;
					insert into _Размещение values (@item,@item_out,0)	
					COMMIT TRANSACTION;	
					end
				BEGIN  TRANSACTION;
					insert into _Движение   values (@item,@item_in,@item_out,@v)
					update _Размещение
						set Количество = Количество - @v
						where Место = @item_in
					update _Размещение
						set Количество = Количество + @v
						where Место = @item_out
				COMMIT TRANSACTION;		
				end			
	end
	else 
		return;
if @x = 'изменение'
	begin

		BEGIN  TRANSACTION;
		
		update _Движение
		set Количество = @v
		where	Товар		= @item		and
				Откуда		= @item_in	and
				Куда		= @item_out
		
		
		update _Размещение
		set Количество = 
			(select case when sum(Количество) is null then 0 else sum(Количество) end from _Движение where Куда =  @item_out)
			-
			(select case when sum(Количество) is null then 0 else sum(Количество) end from _Движение where Откуда =  @item_in)
		where Место = @item_out 
		
		COMMIT TRANSACTION;	
	end
if @x = 'снести N'
begin

		BEGIN  TRANSACTION;
		
		delete from _Движение
		where 
				Товар		= @item		and
				(
                                 Откуда		= @item_out	
                                 or  
                                 Куда		= @item_out
                                 )
				
		delete from _Размещение
		where 
				Товар		= @item		and
				Место		= @item_out


		COMMIT TRANSACTION;	
	end	
END
GO

/*=================================*/
/*=================================*/

/* собственно психи одиночки, а можно в цикле + табличка */
exec _data_look 1, 0, 3, 10,   'движение'
exec _data_look 1, 0, 2, 5,     'движение'
exec _data_look 1, 2, 3, 5,     'движение'
exec _data_look 1, 0, 3, 100, 'изменение'   
 /* а тут меняем данные первого exec на 100 и пересчитываем результат, 
но тут на отрицательное не ставил условие- забил :) */
exec _data_look 1, 2, 3, 4,  'снести N'
/* сносим вообще всю историю со складом 3 */

select * from _Движение
select * from _Размещение
/*
truncate table _Движение
truncate table _Размещение
*/