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

Откуда: Питер
Сообщений: 1401
Создается временная табличка.В нее процедурой вствляются данные.
Проблема в том что таблица может содержать разное количество полей.Всего там два варианта -либо одно, либо другое .
Хочется при если параметр null, то делать один insert, иначе другой.
Что-то типа такого.
create procedure proc
 @param1 ,@param2......
 @param3 money=null, @param4 money=null 
as
  if @param3 is null or @param4 is null
    begin 
       insert into #tmp (filed1,filed2,filed3,filed4)
              values(@param1,@param2)
    end
  else
    begin
       insert into #tmp (filed1,filed2,filed3,filed4)
              values(@param1,@param2,@param3,@param4)
    end

23 ноя 09, 21:59    [7967045]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
iljy
Member

Откуда:
Сообщений: 8711
linke,

а зачем собственно говоря такое нужно? Чего проще - вставлять в ненужные в данный момент поля NULL-значения? И процедуру упростить.
create procedure proc
 @param1 ,@param2...
 @param3 money=null, @param4 money=null 
as
       insert into #tmp (filed1,filed2,filed3,filed4)
              values(@param1,@param2,@param3,@param4)
и собственно все.
23 ноя 09, 22:04    [7967053]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
iljy
linke,

а зачем собственно говоря такое нужно? Чего проще - вставлять в ненужные в данный момент поля NULL-значения? И процедуру упростить.
create procedure proc
 @param1 ,@param2...
 @param3 money=null, @param4 money=null 
as
       insert into #tmp (filed1,filed2,filed3,filed4)
              values(@param1,@param2,@param3,@param4)
и собственно все.


В том то и дело что в #tmp может не быть filed3,filed4(версии разные ПО и не всех еще перетащили на новую кто-то не обновился или не смог получить еще обновление а данные ему передавать надо).
23 ноя 09, 22:12    [7967062]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
iljy
Member

Откуда:
Сообщений: 8711
linke,

ну а так написать
create procedure proc
 @param1 ,@param2......
 @param3 money=null, @param4 money=null 
as
  if @param3 is null or @param4 is null
    begin 
       insert into #tmp (filed1,filed2)
              values(@param1,@param2)
    end
  else
    begin
       insert into #tmp (filed1,filed2,filed3,filed4)
              values(@param1,@param2,@param3,@param4)
    end
кто мешает? Если поля field3, filed4 NULLABLE - работать будет в любом случае.
23 ноя 09, 22:18    [7967077]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
iljy,

Проблема в том, что если поля в таблице нету при создании процедуры ругается на недопустимое имя столбца.

Microsoft SQL Server 2005 - 9.00.3054.00 (Intel X86)   Mar 23 2007 16:28:52   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2) 
23 ноя 09, 22:44    [7967126]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
linke,

Ну и при выполнении процедуры аналогично ругается.
23 ноя 09, 22:46    [7967129]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
iljy
Member

Откуда:
Сообщений: 8711
linke
linke,

Ну и при выполнении процедуры аналогично ругается.


да, действительно, я просто сначала с полнум набором полей запустил - все сработало.
Ну значит sp_executesql вам поможет
23 ноя 09, 22:53    [7967145]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
linke
Member

Откуда: Питер
Сообщений: 1401
iljy,

Это понятно, не понятно почему так нельзя.
23 ноя 09, 23:25    [7967201]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
iljy
Member

Откуда:
Сообщений: 8711
linke,

потому что перед выполнением происходит компиляция. У меня она прошла - таблица при первом запуске была широкая, и дальше работало и на узкой. Но так делать не стоит, перекомпиляция может произойти автоматом и будет ой. Поэтому когда структура таблицы заранее не известна - приходится делать динамику
23 ноя 09, 23:48    [7967245]     Ответить | Цитировать Сообщить модератору
 Re: Вставка в таблицу по условию  [new]
iljy
Member

Откуда:
Сообщений: 8711
linke,

кстати можете попробовать такой вариант
create procedure [dbo].[proc1]
 @param1 int,@param2 int,
 @param3 money=null, @param4 money=null 
as
	declare @t table
	(
		filed1 int,filed2 int,filed3 money,filed4 money
	)
	insert into @t(filed1,filed2,filed3,filed4)
              values(@param1,@param2,@param3,@param4)

  if @param3 is null or @param4 is null
    begin 
       insert into #tmp (filed1,filed2)
       select filed1,filed2
       from @t
    end
  else
    begin
       insert into #tmp
       select * from @t
    end
Но мне такое не очень нравится - уж больно хак напоминает...
23 ноя 09, 23:53    [7967259]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить