2012-11-27 2 views
0

je suis en train d'exécuter cette requête, mais je suis une erreur:est-il possible de créer un #table temporaire à l'intérieur d'un openrowset?

Msg 8180, Level 16, State 1, Line 1 
Statement(s) could not be prepared. 
Msg 208, Level 16, State 1, Line 11 
Invalid object name '#test1'. 

mon code:

select * from openrowset ('SQLOLEDB','DRIVER={SQL Server};SERVER=10.12.131.58;UID=sa;PWD=desarrollo',' 



create table #test1 
(
id int, 
name1 varchar(50) 
) 

insert into #test1 
select cliente,nomcli from opepte.dbo.clientes 

select * from #test1 

/*this is a example but in real query i need manipulate this information and return 
a resulset with few rows 
*/ 


') 

mais cette autre requête fonctionne très bien.

select * from openrowset ('SQLOLEDB','DRIVER={SQL Server};SERVER=10.12.131.58;UID=sa;PWD=desarrollo',' 



create table #test1 
(
id int, 
name1 varchar(50) 
) 

--insert into #test1 
select cliente,nomcli from opepte.dbo.clientes 

--select * from #test1 

/*this is a example but in real query i need manipulate this information and return 
a resulset with few rows 
*/ 


') 

Note: insérer dans # test1 et select * from # test1 sont coment

+0

Qu'est-ce exactement ce que vous essayez de faire, que vous essayez de créer une table temporaire? Pourriez-vous simplement utiliser une expression de table commune (CTE) à la place? –

Répondre

2
  1. Utilisez FMTONLY & NOCOUNT
  2. Juste pourquoi ne pas utiliser variable déposée au lieu de température? Puisque vous renvoyez explicitement des données via ce code, personne n'utilisera votre table temporaire à nouveau.
  3. Également envisager une chaîne de fournisseur et de connexion plus robuste et plus sécurisée: 'SQLNCLI', 'Server = localhost; Integrated Security = SSPI; Trusted_Connection = yes;'

    select * from openrowset ('SQLOLEDB','DRIVER={SQL Server};SERVER=10.12.131.58;UID=sa;PWD=desarrollo', N' 
    
    SET FMTONLY OFF 
    SET NOCOUNT ON 
    
    declare @q int = 1 
    
    declare @test1 table 
    (
    id int, 
    name1 varchar(50) 
    ) 
    
    insert into @test1 
    select 1,''q'' 
    
    insert into @test1 
    select 1,''q'' 
    
    select * from @test1 
    
    /*this is a example but in real query i need manipulate this information and return 
    a resulset with few rows 
    */ 
    ') 
    
0

Je ne pense pas que vous pouvez l'interface openquery/rowset est assez limité. Étant donné que le serveur distant est un serveur SQL, vous pouvez utiliser une fonction basée sur une table pour fournir les fonctionnalités dont vous avez besoin. Sinon, vous pouvez utiliser une procédure stockée d'exécution à distance ou un serveur lié pour ce faire.

Questions connexes