Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 insert into #temp... select * from OPENQUERY  [new]
Mishanja
Member

Откуда:
Сообщений: 84
DECLARE @startDate smalldatetime
DECLARE @endDate smalldatetime
DECLARE @SidID bigint
declare @filerID int
SET @SidID = 1
set @startDate = '20070101'
set @endDate = '20080101'
set @filerID = 1

IF OBJECT_ID('tempdb..#Hist_resultsTab') IS NOT NULL
DROP TABLE #Hist_resultsTab

CREATE TABLE #Hist_resultsTab (
counter INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
filerID int default 0,
objID BIGINT,
objName NVARCHAR(608),
objType INT,
[timestamp] DATETIME NOT NULL,
status INT,
changedBy NVARCHAR(64),
detailedChange NVARCHAR(500)
)

insert into #Hist_resultsTab(filerID, [objID], ObjName, objType, [status], [timestamp], changedBy, DetailedChange)
select * from
OPENQUERY([L23-SHADOW\MMV],'EXEC sp_executesql N''[L23-FILER2K].dbo.Hist_GetShadowSidHistory @objID_i , @startDate_i, @endDate_i, @filerID_i'', N''@objID_i bigint, @startDate_i datetime, @endDate_i datetime, @filerID int'',
N''@objID_i = @SidID, @startDate_i = @startDate, @endDate_i = @endDate, @filerID = @locFilerID''')


poluchaju oshibku:


Msg 7357, Level 16, State 2, Line 28
Cannot process the object "EXEC sp_executesql N'[L23-FILER2K].dbo.Hist_GetShadowSidHistory @objID_i , @startDate_i, @endDate_i, @filerID_i', N'@objID_i bigint, @startDate_i datetime, @endDate_i datetime, @filerID int',
N'@objID_i = @SidID, @startDate_i = @startDate, @endDate_i = @endDate, @filerID = @locFilerID'". The OLE DB provider "SQLNCLI" for linked server "L23-SHADOW\MMV" indicates that either the object has no columns or the current user does not have permissions on that object.


chto za problema?
24 янв 08, 15:49    [5198698]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
запрос внутри OPENQUERY должен возращать набор данных. Вот сервер не может определить, что за набор возвращается
24 янв 08, 15:56    [5198756]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Mishanja
Member

Откуда:
Сообщений: 84
tak kak mne eto predotvratit?
24 янв 08, 16:10    [5198871]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mishanja
tak kak mne eto predotvratit?

Процедуру [L23-FILER2K].dbo.Hist_GetShadowSidHistory исправить
24 янв 08, 16:14    [5198897]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Mishanja
Member

Откуда:
Сообщений: 84
a chto ona dolzna vozvrashat chto bi nebilo oshibki
24 янв 08, 16:18    [5198922]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Она должана в скрипте

SET FMTONLY ON 
GO
exec [L23-FILER2K].dbo.Hist_GetShadowSidHistory ...
GO
SET FMTONLY  OFF 
возвращать пустой набор
24 янв 08, 16:21    [5198960]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Mishanja
Member

Откуда:
Сообщений: 84
chto taloe pustoi nabor?
mozno primer
24 янв 08, 16:26    [5199005]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Glory
Member

Откуда:
Сообщений: 104760
Mishanja
chto taloe pustoi nabor?
mozno primer

пустой набор - это набор без единой записи. В QA это выглядит как пустой грид с именами столбцов
24 янв 08, 16:28    [5199021]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
Столкнулась с похожей проблеммой.
Исходную процедуру нельзя изменить. Пробовала "обернуть" её процедурой, которая возвращает пустой набор данных. Всё равно ошибка такая же.

так работает, возвращает данные
exec [DWH_Test01].[dbo].[temp_V82UnPackB]	    
 

так работает, возвращает пустой набор
SET FMTONLY ON 
GO	
exec [DWH_Test01].[dbo].[temp_V82UnPackB]	    
GO
SET FMTONLY  OFF 
 

так ошибка
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',
'exec [DWH_Test01].[dbo].temp_V82UnPackB ')

Cannot process the object "exec [DWH_Test01].[dbo].temp_V82UnPackB ". 
The OLE DB provider "SQLNCLI10" for linked server "(null)" indicates that either the object has no columns 
or the current user does not have permissions on that object.



Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


код процедуры temp_V82UnPackB
create procedure temp_V82UnPackB
as
begin
	
	declare @ПродажиДетальные table (  Товар binary(16)
								   , КлючКомбинации binary(16)
								   , Количество numeric(9,0)
								   , СуммаПродажиРуб numeric(19,2)
								   , СкидкаРуб numeric(19,2)
								   , СуммаЗакупкиРуб numeric(19,2)
								   , СкидкаНаПодключение numeric(19,2)
								   , Кредит binary(1)
								   , Возврат binary(1)
								   , КатегорияЦенРуб binary(16)
								   , Комиссия numeric(5,2)
								   , ФизическоеЛицо binary(16)
								   , ЭтоИМ binary(1)
								   , ЭлектронныйКаталог numeric(5,0)
								   , Час tinyint
								   ) 
								   
								   	
	declare @b varbinary(max)
	select top 1 @b = Хранилище
	from [DWH_Test01].[dbo].[SПродажиДетальныеХранилищеID]

	insert into  @ПродажиДетальные
	exec DWH_Test00.dbo.[V82UnPackB] @b 
  
    select * from @ПродажиДетальные
end
28 апр 12, 13:28    [12485052]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
f070214
Member

Откуда:
Сообщений: 35
Судя по описанию команды SET FMTONLY так и должно быть...
28 апр 12, 14:11    [12485377]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
f070214
Member

Откуда:
Сообщений: 35
Пардон, невнимательно прочитал пост, ответ не в тему...
28 апр 12, 14:12    [12485385]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Katy,
А так ошибка будет?
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',
'select 1 as num')
go
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',
'select null as num')
28 апр 12, 14:25    [12485479]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
trew, нет.
28 апр 12, 14:45    [12485632]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
вот так работает
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',							
	'			SET FMTONLY OFF 

   declare @ПродажиДетальные table ( Товар binary(16)
								   , КлючКомбинации binary(16)
								   , Количество numeric(9,0)
								   , СуммаПродажиРуб numeric(19,2)
								   , СкидкаРуб numeric(19,2)
								   , СуммаЗакупкиРуб numeric(19,2)
								   , СкидкаНаПодключение numeric(19,2)
								   , Кредит binary(1)
								   , Возврат binary(1)
								   , КатегорияЦенРуб binary(16)
								   , Комиссия numeric(5,2)
								   , ФизическоеЛицо binary(16)
								   , ЭтоИМ binary(1)
								   , ЭлектронныйКаталог numeric(5,0)
								   , Час tinyint
								   ) 


	declare @b varbinary(max)
		  
	select top 1 @b = Хранилище
	from [DWH_Test01].[dbo].[SПродажиДетальныеХранилищеID]

    exec [DWH_Test00].[dbo].[V82UnPackB] @b
   
    ')


а вот так уже нет
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',							
	'								   								   	
SET FMTONLY OFF
	
   declare @ПродажиДетальные table ( Товар binary(16)
								   , КлючКомбинации binary(16)
								   , Количество numeric(9,0)
								   , СуммаПродажиРуб numeric(19,2)
								   , СкидкаРуб numeric(19,2)
								   , СуммаЗакупкиРуб numeric(19,2)
								   , СкидкаНаПодключение numeric(19,2)
								   , Кредит binary(1)
								   , Возврат binary(1)
								   , КатегорияЦенРуб binary(16)
								   , Комиссия numeric(5,2)
								   , ФизическоеЛицо binary(16)
								   , ЭтоИМ binary(1)
								   , ЭлектронныйКаталог numeric(5,0)
								   , Час tinyint
								   ) 


	declare @b varbinary(max)
		  
	select top 1 @b = Хранилище
	from [DWH_Test01].[dbo].[SПродажиДетальныеХранилищеID]

    insert into @ПродажиДетальные
    exec [DWH_Test00].[dbo].[V82UnPackB] @b
   
    select * from @ПродажиДетальные
     
    ')

ошибка: The OLE DB provider "SQLNCLI10" for linked server "(null)" indicates that either the object has no columns or the current user does not have permissions on that object.

Мне нужно вызвать [DWH_Test00].[dbo].[V82UnPackB] для нескольких строк из таблицы [DWH_Test01].[dbo].[SПродажиДетальныеХранилищеID] и результат вернуть одним запросом вот для этого ssas2008 r2: можно ли сделать партицию, которая выбирает данные из Stored Procedures?
28 апр 12, 15:04    [12485775]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
вот на стандартных процедурах

/*
	exec [dbo].[temp_sp_columns] 	
*/	
create procedure temp_sp_columns
as
begin
	
	declare @T table ( TABLE_QUALIFIER varchar(500),
	                   TABLE_OWNER varchar(500),
	                   TABLE_NAME varchar(500),
	                   COLUMN_NAME varchar(500),
	                   DATA_TYPE varchar(500),
	                   TYPE_NAME varchar(500),
	                   PRECISION varchar(500),
	                   LENGTH varchar(500),
	                   SCALE varchar(500),
	                   RADIX varchar(500),
	                   NULLABL varchar(500),
	                   REMARKS              varchar(500),
	                   COLUMN_DEF           varchar(500), 
	                   SQL_DATA_TYPE        varchar(500),
	                   SQL_DATETIME_SUB        varchar(500),
	                   CHAR_OCTET_LENGTH        varchar(500),
	                   ORDINAL_POSITION        varchar(500),
	                   IS_NULLABLE        varchar(500),
	                   SS_DATA_TYPE       varchar(500)
								   ) 
								   
     declare @b varchar(500)								   	
	 set @b = '_AccumRg384'	 
	
	 insert into @T
	 exec sys.sp_columns @b
  
     select * from @T
end


возвращает пустой набор
SET FMTONLY ON 
GO	
exec [DWH_Test01].[dbo].[temp_sp_columns] 
GO
SET FMTONLY  OFF     


возвращает ошибку
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',						
	' exec [DWH_Test01].[dbo].[temp_sp_columns]     ')


Msg 7357, Level 16, State 1, Line 1
Cannot process the object "
exec [DWH_Test01].[dbo].[temp_sp_columns]
". The OLE DB provider "SQLNCLI10" for linked server "(null)" indicates that either the object has no columns or the current user does not have permissions on that object.
28 апр 12, 15:18    [12485869]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
iljy
Member

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

и вы проверили, что у вас есть права на запуск этих процедур?
28 апр 12, 15:54    [12486122]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Virus квартирус
Member

Откуда: Москва
Сообщений: 41
Что мешает сделать так?

declare @ПродажиДетальные table ( Товар binary(16)
							   , КлючКомбинации binary(16)
							   , Количество numeric(9,0)
							   , СуммаПродажиРуб numeric(19,2)
							   , СкидкаРуб numeric(19,2)
							   , СуммаЗакупкиРуб numeric(19,2)
							   , СкидкаНаПодключение numeric(19,2)
							   , Кредит binary(1)
							   , Возврат binary(1)
							   , КатегорияЦенРуб binary(16)
							   , Комиссия numeric(5,2)
							   , ФизическоеЛицо binary(16)
							   , ЭтоИМ binary(1)
							   , ЭлектронныйКаталог numeric(5,0)
							   , Час tinyint
							   ) 

insert into @ПродажиДетальные
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;',							
	'								   								   	
	declare @b varbinary(max)
		  
	select top 1 @b = Хранилище
	from [DWH_Test01].[dbo].[SПродажиДетальныеХранилищеID]
	
    exec [DWH_Test00].[dbo].[V82UnPackB] @b
    ')
    
select * from @ПродажиДетальные



Т.е. INSERT вынести за OPENROWSET.
28 апр 12, 17:13    [12486363]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
iljy, права есть. без OPENROWSET они выполняются
28 апр 12, 18:13    [12486500]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
Virus квартирус
Что мешает сделать так?
....
Т.е. INSERT вынести за OPENROWSET.

дело в том, что этот вызов нужен для процессинга партици в ssas
при процессинге, ssas оборачивает запрос таким кодом
select * from ( <-- тут код, который возвращает набор данных --> )

обсуждалось тут: ssas2008 r2: можно ли сделать партицию, которая выбирает данные из Stored Procedures?
28 апр 12, 18:16    [12486504]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
iljy
Member

Откуда:
Сообщений: 8711
Katy
iljy, права есть. без OPENROWSET они выполняются

Что значит "без OPENROWSET"? На локальном сервере чтоли? Так вы с другими правами выполняете.
28 апр 12, 18:32    [12486529]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
iljy
Katy
iljy, права есть. без OPENROWSET они выполняются

Что значит "без OPENROWSET"? На локальном сервере чтоли? Так вы с другими правами выполняете.
почему с другими правами? OPENROWSET тоже к локальному обращается ( Server=localhost )
28 апр 12, 21:23    [12486824]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
iljy
Member

Откуда:
Сообщений: 8711
Katy
iljy
пропущено...

Что значит "без OPENROWSET"? На локальном сервере чтоли? Так вы с другими правами выполняете.
почему с другими правами? OPENROWSET тоже к локальному обращается ( Server=localhost )

Она обращается к удаленному. А то, что он - тот же самый, ничего принципиально не меняет. Выполните через OPENROWSET, скажем, SELECT ORIGINAL_LOGIN()
29 апр 12, 11:45    [12487874]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
iljy
Katy
пропущено...
почему с другими правами? OPENROWSET тоже к локальному обращается ( Server=localhost )

Она обращается к удаленному. А то, что он - тот же самый, ничего принципиально не меняет. Выполните через OPENROWSET, скажем, SELECT ORIGINAL_LOGIN()

SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'SELECT ORIGINAL_LOGIN() ')
возвращает мой логин
30 апр 12, 12:46    [12490214]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
Katy
Member

Откуда: Екатеринбург-Москва
Сообщений: 876
переформулирую вопрос
можно ли как то вот такой код

	declare @T table ( TABLE_QUALIFIER varchar(500),
	                   TABLE_OWNER varchar(500),
	                   TABLE_NAME varchar(500),
	                   COLUMN_NAME varchar(500),
	                   DATA_TYPE varchar(500),
	                   TYPE_NAME varchar(500),
	                   PRECISION varchar(500),
	                   LENGTH varchar(500),
	                   SCALE varchar(500),
	                   RADIX varchar(500),
	                   NULLABL varchar(500),
	                   REMARKS              varchar(500),
	                   COLUMN_DEF           varchar(500), 
	                   SQL_DATA_TYPE        varchar(500),
	                   SQL_DATETIME_SUB        varchar(500),
	                   CHAR_OCTET_LENGTH        varchar(500),
	                   ORDINAL_POSITION        varchar(500),
	                   IS_NULLABLE        varchar(500),
	                   SS_DATA_TYPE       varchar(500)
								   ) 
			
	 insert into @T
	 exec msdb.sys.sp_columns 'backupfile'

	 insert into @T
	 exec msdb.sys.sp_columns 'sysalerts'
	 
	   
     select * from @T
переписать так, что бы его можно было обернуть в select * from ( <-- тут какой то код --> )

пробовала через
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', '....')
ошибка The OLE DB provider "SQLNCLI10" for linked server "(null)" indicates that either the object has no columns or the current user does not have permissions on that object.

пробовала сделать процедуру с этим кодом, потом вызвать процедуру через OPENROWSET ошибка такая же
30 апр 12, 12:55    [12490225]     Ответить | Цитировать Сообщить модератору
 Re: insert into #temp... select * from OPENQUERY  [new]
invm
Member

Откуда: Москва
Сообщений: 9400
Katy,
select
 *
from
 openrowset('SQLNCLI', 'Server=localhost;Trusted_Connection=yes;', 'set nocount on;
declare @T table (TABLE_QUALIFIER varchar(500),
	                   TABLE_OWNER varchar(500),
	                   TABLE_NAME varchar(500),
	                   COLUMN_NAME varchar(500),
	                   DATA_TYPE varchar(500),
	                   TYPE_NAME varchar(500),
	                   PRECISION varchar(500),
	                   LENGTH varchar(500),
	                   SCALE varchar(500),
	                   RADIX varchar(500),
	                   NULLABL varchar(500),
	                   REMARKS              varchar(500),
	                   COLUMN_DEF           varchar(500), 
	                   SQL_DATA_TYPE        varchar(500),
	                   SQL_DATETIME_SUB        varchar(500),
	                   CHAR_OCTET_LENGTH        varchar(500),
	                   ORDINAL_POSITION        varchar(500),
	                   IS_NULLABLE        varchar(500),
	                   SS_DATA_TYPE       varchar(500)
								   ); 
			
	 insert into @T
	 exec msdb.sys.sp_columns ''backupfile''; select * from @t;');
30 апр 12, 14:12    [12490381]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить