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

Откуда:
Сообщений: 1
Добрый день

Задача прочитать значение поля из таблицы в переменную хранимой процедуры. В ранних версиях поля в структуре таблицы не было. Не хочется его создавать. В этом случае пусть будет 0. Проблема в том, что MS SQL ругается на такой запрос в теле хранимой процедуре.

Declare @test integer

IF exists(SELECT * FROM syscolumns WHERE name = 'field_777' AND id = object_id('table_my'))
SELECT @test = max(field_777) FROM table_my
ELSE
SET @test = 0

print @test

Заранее спасибо, Алексей
31 май 11, 14:37    [10738945]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Засунуть запрос "SELECTmax(field_777) FROM table_my" в процедуру/функцию/динамически запрос.
31 май 11, 14:39    [10738961]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Алексей Б

Без проблем. В своей тестовой БД

CREATE PROCEDURE P_proc1
AS
BEGIN
	SET NOCOUNT ON;

	Declare @test int

	IF exists(SELECT * FROM syscolumns WHERE name = 'CustID' AND id = object_id('Customers'))
	 SELECT @test = max(CustID) FROM Customers
	ELSE
	 SET @test = 0

	SELECT @test

END
Вызов
EXEC P_proc1
Результат: 4
31 май 11, 14:55    [10739109]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Владимир СА
Алексей Б

Без проблем. В своей тестовой БД

Это потому, что у вас вообще нет таблицы Customers
31 май 11, 14:57    [10739133]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Glory
Владимир СА
Алексей Б

Без проблем. В своей тестовой БД

Это потому, что у вас вообще нет таблицы Customers
Я подставил все свое...
31 май 11, 15:00    [10739169]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Владимир СА
Glory
пропущено...

Это потому, что у вас вообще нет таблицы Customers
Я подставил все свое...

Declare @test int

	IF exists(SELECT * FROM syscolumns WHERE name = 'CustID' AND id = object_id('sysindexes'))
	 SELECT @test = max(CustID) FROM sysindexes
	ELSE
	 SET @test = 0
select @test
31 май 11, 15:04    [10739214]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Glory
Владимир СА
пропущено...
Я подставил все свое...

Declare @test int

	IF exists(SELECT * FROM syscolumns WHERE name = 'CustID' AND id = object_id('sysindexes'))
	 SELECT @test = max(CustID) FROM sysindexes
	ELSE
	 SET @test = 0
select @test
Я немного не понял...
У топикастера: "Задача прочитать значение поля из таблицы в переменную хранимой процедуры."
А sysindexes перечень индексов для таблицы...
31 май 11, 15:09    [10739297]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
Glory
Member

Откуда:
Сообщений: 104751
Владимир СА
Glory
пропущено...

Declare @test int

	IF exists(SELECT * FROM syscolumns WHERE name = 'CustID' AND id = object_id('sysindexes'))
	 SELECT @test = max(CustID) FROM sysindexes
	ELSE
	 SET @test = 0
select @test
Я немного не понял...
У топикастера: "Задача прочитать значение поля из таблицы в переменную хранимой процедуры."
А sysindexes перечень индексов для таблицы...

У ТС задача "В ранних версиях поля в структуре таблицы не было. Не хочется его создавать. В этом случае пусть будет 0"
Как вы прочитаете отсутствующее поле существующей таблицы ?
31 май 11, 15:12    [10739331]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
Владимир СА
Member

Откуда:
Сообщений: 7915
Извиняюсь: (поля asdfasfd - естественно нет в таблице)
ALTER PROCEDURE [dbo].[P_proc1]
AS
BEGIN
	SET NOCOUNT ON;

	Declare @test int, @sql varchar(max)
	set @sql = 'SELECT max(asdfasfd) FROM Customers'

	IF exists(SELECT * FROM syscolumns WHERE name = 'asdfasfd' AND id = object_id('Customers'))
	 exec(@sql)
	ELSE
	 SELECT 0

END
Результат: 0
31 май 11, 15:26    [10739460]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Алексей Б
В ранних версиях поля в структуре таблицы не было. Не хочется его создавать. В этом случае пусть будет 0.
"Ранние версии" в старых базах наверно?
Тогда что мешает создать в каждой базе правильную процедуру?
31 май 11, 15:32    [10739530]     Ответить | Цитировать Сообщить модератору
 Re: Запрос к базе и чтение содержимого поля которого возможно нет в структуре таблицы.  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
iap
Тогда что мешает создать в каждой базе правильную процедуру?
Кстати говоря, с помощью динамического запроса.
Зато потом можно просто вызывать процедуру из нужной базы и не париться.
31 май 11, 15:33    [10739540]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить