Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
ВнизКак добавить новое поле в заполненный датасет ? Найти похожие ветки
← →
Махно (2002-10-31 08:26) [0]Здравствуйте,
работаю с MSSQL2000 через ADO.
Выбираю некоторое количество записей, например, вот таким образом:
ADODataSet1.CommandText := "SELECT * FROM MYTABLE";
ADODataSet1.Open;
В результате получаю датасет.
Так вот вопрос, как мне добавить новой поле в этот же самый датасет ?
← →
Delirium (2002-10-31 10:48) [1]Никак
← →
Tundra (2002-10-31 11:10) [2]ADODataSet1.CommandText := "SELECT *,"" as NewField FROM MYTABLE";
ADODataSet1.Open;
← →
Махно (2002-10-31 11:53) [3]2 Tundra
Хм...
Спасибо. Это действительно решение.
Правда есть одно НО.
Как быть если
ADODataSet1.CommandText := "EXEC dbo.prMyStoredProc";
???
← →
Махно (2002-10-31 13:27) [4]
Господа, неужели Delirium прав ?
← →
Андрей Прокофьев (2002-10-31 13:34) [5]Никак не добавить, не закрывая при этом.
SELECT *,"" as NewField FROM MYTABLE можно, но поле NewField будет ReadOnly
← →
ЮЮ (2002-10-31 13:39) [6]Тогда встречный вопрос? Для каких целей в выборке необходимо поле, не существующее в таблице?
← →
sniknik (2002-10-31 13:41) [7]Махно (31.10.02 13:27)
смотря что ты имееш ввиду (сначала я вопрос совсем по другому понял)
можно через временную таблицу выкрутится
ADODataSet1.CommandText :=
"CREATE TABLE #TempTable (....) "+
"INSERT INTO #TempTable EXEC dbo.prMyStoredProc "+
"SELECT *,"""" as NewField FROM #TempTable";
← →
Delirium (2002-10-31 14:59) [8]> sniknik ©
Существует ещё один способ помещения выборки из процедуры в таблицу. Первое что надо сделать - указать в системной таблице master.dbo.sysservers для локального сервера srvstatus=1440, тем самым ядро MSSQL будет обращаться к локальному серверу как к linked. Значение достаточно внести один раз, само оно не измениться. После этого становятся возможными такие запросы:
select * from OpenQuery(MyServer, "exec MyProc")
и разумеется
select * into NewTable from OpenQuery(MyServer, "exec MyProc")
Преимущество этого подхода - нет необходимости заранее знать структуру получаемых данных.
← →
sniknik (2002-10-31 16:44) [9]правильней наверно будет не править таблицу а запустить
EXEC sp_addlinkedserver "MyServer", "SQL Server"
и srvstatus у меня получается = 1249 почемуто, но у меня предубеждение против линков, зря наверное, т.к. преимущества очевидны.
← →
Delirium (2002-10-31 18:17) [10]Всё нижеследущее IMHO и неточная, субъективная информация.
Я столкнулся с этой задачей довольно давно, с тех пор много экспериментировал, результаты и самостоятельные умозаключения таковы: если создать linked server сам к себе, то при обращении к функции OpenQuery MSSQL задействует свои сетевые службы, тем самым существенно (37 сек. против 25) затормаживает большие выборки. Никаким иным способом, кроме как исправление статуса "руками", обойти эту неприятность мне не удалось.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c