powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / достало
25 сообщений из 28, страница 1 из 2
достало
    #32037207
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
помжите .....
вот 2 процедуры
1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE      PROCEDURE Sp_ttt1
@t varchar( 30 ) 
WITH RECOMPILE
AS
DECLARE @q varchar( 1 ), @sqltxt varchar( 4000 )
DECLARE @t varchar( 30 ), @id int

SET @q = CHAR( 39 )
SET @sqltxt = 'SELECT * FROM OPENROWSET(' +@q + 'MSDASQL' + @q + ',' + @q + 'Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=Z:\BUH\BEST4904\ENERGY\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=Yes;' +@q + ',' + @q + 'SELECT * FROM ' + @t + @q + ')'
EXEC(@sqltxt)

2 -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE      PROCEDURE Sp_ttt 
WITH RECOMPILE
AS
DECLARE @q varchar( 1 ), @sqltxt varchar( 4000 )
DECLARE @t varchar( 30 ), @id int
SELECT TOP  1  @id =[id] FROM tt
SELECT @t =tbl FROM allbases WHERE allbases.[id] = @id 

SET @q = CHAR( 39 )
SET @sqltxt = 'SELECT * FROM OPENROWSET(' +@q + 'MSDASQL' + @q + ',' + @q + 'Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=Z:\BUH\BEST4904\ENERGY\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=Yes;' +@q + ',' + @q + 'SELECT * FROM ' + @t + @q + ')'
EXEC(@sqltxt)

пытаемся использовать -
Код: plaintext
1.
 SELECT  * FROM OPENROWSET('SQLOLEDB','SRV\NETSDK';'sa';'','EXEC [best].[dbo].[Sp_ttt1]')
SELECT  * FROM OPENROWSET('SQLOLEDB','SRV\NETSDK';'sa';'','EXEC [best].[dbo].[Sp_ttt] @t="main"') 

первая не работает а вторая Ок
...
Рейтинг: 0 / 0
достало
    #32037213
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перепутали процедуры - у Вас Sp_tttl с параметром, а вызываете ее без...
...
Рейтинг: 0 / 0
достало
    #32037218
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон ... опечатался...
но проблемы не решает....
...
Рейтинг: 0 / 0
достало
    #32037224
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем работает только которая с параметром...
проблема в том что нужна как раз та что без параметров....
...
Рейтинг: 0 / 0
достало
    #32037229
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот это, скорее всего связано с тем, что Sp_ttt при вызове:

Код: plaintext
1.
2.
SET FMTONLY ON
EXEC Sp_ttt 


возвращает информацию о столбцах...

А первая - нет.

Удачи
...
Рейтинг: 0 / 0
достало
    #32037232
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и дело что не стоит FMTONLY....
и не просто невыполняется а ругается конкретно....
The operation could not be performed because the OLE DB provider 'MSDASQL' was unable to begin a distributed transaction.
[OLE/DB provider returned message: [Microsoft][ODBC Visual FoxPro Driver]Driver not capable]
...
Рейтинг: 0 / 0
достало
    #32037234
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том то и дело что не стоит FMTONLY....
Вы не поняли меня. Речь о том, что если запустить Ваши процедуры с опцией FMTONLY (например, в Query Analyzer), то одна из них вернет набор столбцов, другая - нет. Причем та, что вернет, не будет работать, ежели из нее SELECT убрать....
...
Рейтинг: 0 / 0
достало
    #32037241
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
SELECT  * FROM OPENROWSET('SQLOLEDB','SRV\NETSDK';'sa';'','EXEC [best].[dbo].[Sp_ttt1] @t="main"')  

возвращает конкретные данные.... таблица около 7000 строк
...
Рейтинг: 0 / 0
достало
    #32037248
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте все с нуля (т.к. были опечатки):
1. Тело каждой из процедур
2. Вызовы - работающие и нет
3. Вызовы после установки SET FMTONLY ON
...
Рейтинг: 0 / 0
достало
    #32037256
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
процедура 1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE      PROCEDURE Sp_ttt1
@t varchar( 30 ) 
WITH RECOMPILE
AS
DECLARE @q varchar( 1 ), @sqltxt varchar( 4000 )
SET @q = CHAR( 39 )
SET @sqltxt = 'SELECT * FROM OPENROWSET(' +@q + 'MSDASQL' + @q + ',' + @q + 'Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=Z:\BUH\BEST4904\ENERGY\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=Yes;' +@q + ',' + @q + 'SELECT * FROM ' + @t + @q + ')'
EXEC(@sqltxt)

процедура 2
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE      PROCEDURE Sp_ttt 
WITH RECOMPILE
AS
DECLARE @q varchar( 1 ), @sqltxt varchar( 4000 )
DECLARE @t varchar( 30 ), @id int
SELECT TOP  1  @id =[id] FROM tt
SELECT @t =tbl FROM allbases WHERE allbases.[id] = @id 

SET @q = CHAR( 39 )
SET @sqltxt = 'SELECT * FROM OPENROWSET(' +@q + 'MSDASQL' + @q + ',' + @q + 'Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=Z:\BUH\BEST4904\ENERGY\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Russian;Null=No;Deleted=Yes;' +@q + ',' + @q + 'SELECT * FROM ' + @t + @q + ')'
EXEC(@sqltxt)

и соответственно вызовы...
1 - работает
Код: plaintext
1.
SELECT  * FROM OPENROWSET('SQLOLEDB','SRV\NETSDK';'sa';'','EXEC [best].[dbo].[Sp_ttt1] @t="main"')

2 - не работает
Код: plaintext
 SELECT  * FROM OPENROWSET('SQLOLEDB','SRV\NETSDK';'sa';'','EXEC [best].[dbo].[Sp_ttt]')

если перед вызовом выставить FMTONLY ON
nто все равно первая возвращает структуру, а вторая ругается...
да во второй процедуре в принципе подставляется тот же параметр что и в первой просто формируется по другому....
...
Рейтинг: 0 / 0
достало
    #32037269
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А проверялось, что содержится в переменной @t после соотв. селекта?
...
Рейтинг: 0 / 0
достало
    #32037271
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО main
.....
...
Рейтинг: 0 / 0
достало
    #32037274
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убедиться бы в этом не мешало
...
Рейтинг: 0 / 0
достало
    #32037279
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все таки, мне кажется, что все дело в FMTONLY.
Скажем, для второй процедуры (Sp_ttt) значение
@t при вызове с FMTONLY (а именно с FMTONLY оно
вызывается сначала в случае OPENROWSET) будет
пуста... Соответственно, вложенный OPENROWSET ничего не получает...
...
Рейтинг: 0 / 0
достало
    #32037280
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пуст(о)
...
Рейтинг: 0 / 0
достало
    #32037284
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
база tt :
единственный столбец - id
единственная строка - 33
база allbases:
поле id
поле tbl (varchar(30)) имена таблиц
Код: plaintext
1.
2.
select tbl from allbases where id= 33 
main
...
Рейтинг: 0 / 0
достало
    #32037285
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в базе main.dbf около 7000 записей....
и еще раз повторяю
первый запрос возвращает все записи...
второй ругается :-
The operation could not be performed because the OLE DB provider 'MSDASQL' was unable to begin a distributed transaction.
[OLE/DB provider returned message: [Microsoft][ODBC Visual FoxPro Driver]Driver not capable]
...
Рейтинг: 0 / 0
достало
    #32037291
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и еще ...
заменил exec на
print @t
print @sqltxt
резултаты абсолютно идентичны!....
...
Рейтинг: 0 / 0
достало
    #32037360
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вооот.... и тишинаааа....
...
Рейтинг: 0 / 0
достало
    #32037362
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok
Ну а простой вызов

EXEC [best].[dbo].[Sp_ttt]

с FMTONLY ON/OFF что дает ?
...
Рейтинг: 0 / 0
достало
    #32037377
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSDTC запущен?
Процедура запускается не из-под триггером случайно?
...
Рейтинг: 0 / 0
достало
    #32037414
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glory
с FMTONLY OFF просто exec возвращает записи
и OFF возвращает структуру....
Dankov
в том то и дело что нет....
когда использую просто exec обе работают нормально, т.е.
возвращают записи
как только через openquery или openrowset ... грабли...
там где имя таблици формируется динамически с использованием таблиц грабли... где параметр передаю все ок!... но ведь нужно динамически блин!
...
Рейтинг: 0 / 0
достало
    #32037435
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вот это работает без проблем

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Sp_ttt]') and OBJECTPROPERTY(id, N'IsProcedure') =  1 )
drop procedure [dbo].[Sp_ttt]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

CREATE        PROCEDURE Sp_ttt 
WITH RECOMPILE
AS
DECLARE @sqltxt varchar( 4000 )
DECLARE @t varchar( 30 ), @id int
SELECT @id =  33 
SELECT @t = tbl FROM allbases WHERE allbases.[id] = @id

SET @sqltxt = 'select * from OPENROWSET(''MSDASQL'',''Driver={Microsoft dBase Driver (*.dbf)};DBQ=L:\'',''Select * from '+ @t +'.dbf'')'
EXEC(@sqltxt)

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Sp_ttt1]') and OBJECTPROPERTY(id, N'IsProcedure') =  1 )
drop procedure [dbo].[Sp_ttt1]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS ON 
GO

CREATE       PROCEDURE Sp_ttt1
@t varchar( 30 ) 
WITH RECOMPILE
AS
DECLARE @sqltxt varchar( 4000 )
SET @sqltxt = 'select * from OPENROWSET(''MSDASQL'',''Driver={Microsoft dBase Driver (*.dbf)};DBQ=L:\'',''Select * from '+ @t +'.dbf'')'
EXEC(@sqltxt)

GO
SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO


SELECT  * FROM OPENROWSET('SQLOLEDB','MYSQLSERVER';'sa';'mypass','EXEC [pubs].[dbo].[Sp_ttt1] @t=''suund''')

SELECT  * FROM OPENROWSET('SQLOLEDB','MYSQLSERVER';'sa';'mypass','EXEC [pubs].[dbo].[Sp_ttt]')

...
Рейтинг: 0 / 0
достало
    #32037457
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пе прокатит.... :((
нужен FOXPRO-шный драйвер....
есть базы которые только он и откроет....
базы клипперовские индексы CDX....
в принципе нужно это иногда.... и только чтобы создать метаданные по этим таблицам...
потом используя их динамически создавать временные таблицы для связки INSERT EXEC...
если б работал select exec вообще прблем бы не было....
...
Рейтинг: 0 / 0
достало
    #32037554
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вникнуть в смысел ошибки "was unable to begin a distributed transaction", то становится очевидно, что MSDTC должен быть обязатлеьно запущен, ибо без него любая distributed транзакция благополучно обломится. А вот почему она становится distributed в случае с двумя селектами, это интересно, но непонятно.
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / достало
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]