복붙노트

[SQL] OPENROWSET 쿼리에서 변수 사용

SQL

OPENROWSET 쿼리에서 변수 사용

나는이 쿼리에 문제가 :

SELECT * 
FROM OPENROWSET(
    'SQLNCLI',
    'DRIVER={SQL Server};',
    'EXEC dbo.sProc1 @ID = ' + @id 
 )

오류를 제공합니다 :

누구를 알고 왜이 오류를 받고 있어요?

해결법

  1. ==============================

    1.스콧에 의해 제안으로, 당신은 매개 변수를 전달하기 위해 동적 SQL을 생성 OPENROWSET.Try에 표현식을 사용할 수 없습니다

    스콧에 의해 제안으로, 당신은 매개 변수를 전달하기 위해 동적 SQL을 생성 OPENROWSET.Try에 표현식을 사용할 수 없습니다

    Declare @ID int
    Declare @sql nvarchar(max)
    Set @ID=1
    Set @sql='SELECT * 
    FROM OPENROWSET(
                   ''SQLNCLI'',
                   ''DRIVER={SQL Server};'',
                   ''EXEC dbo.usp_SO @ID =' + convert(varchar(10),@ID) + ''')'
    
    -- Print @sql
     Exec(@sql)
    
  2. ==============================

    2.OPENROWSET는 문자열 리터럴이 아닌 표현을 필요로한다. 이 문자열 리터럴보다 아무것도 기대하지 않고 당신이 연산자를 사용하여 문자열 리터럴을 follewed becaue 그것은, 더하기 기호에 대한 불평.

    OPENROWSET는 문자열 리터럴이 아닌 표현을 필요로한다. 이 문자열 리터럴보다 아무것도 기대하지 않고 당신이 연산자를 사용하여 문자열 리터럴을 follewed becaue 그것은, 더하기 기호에 대한 불평.

    http://msdn.microsoft.com/en-us/library/ms190312.aspx있는 상태를 참조하십시오 :

  3. ==============================

    3.

    Declare @Route VARCHAR(200)
    Declare @sql nvarchar(max)
    Set @Route='C:\OCRevisiones.xlsx;'
    Set @sql='SELECT * INTO FFFF
    FROM OPENROWSET(
                   ''Microsoft.ACE.OLEDB.12.0'',
                   ''Excel 12.0;HDR=YES;Database=' + @Route + ''',
                   ''SELECT * FROM [Sheet1$]'')'
    
     Print @sql
     --Exec(@sql)
    
  4. ==============================

    4.하는 것에 대해 가치가있다 .. 우리는 바로 연결된 서버 쿼리보다는 OPENROWSET 사용하는 이유는 연결된 서버 쿼리에 대한 처리가 로컬 서버에서 발생한다는 것입니다. (느리고 종종 테이블 다시의 대부분을 제공)

    하는 것에 대해 가치가있다 .. 우리는 바로 연결된 서버 쿼리보다는 OPENROWSET 사용하는 이유는 연결된 서버 쿼리에 대한 처리가 로컬 서버에서 발생한다는 것입니다. (느리고 종종 테이블 다시의 대부분을 제공)

    그래, 우리는 위와 같이 문자열 연결을 할 수 있습니다.

    당신이 구문의 용이성 및 매개 변수의 힘이 다른 옵션을 선택합니다.

    시저는 당신이 필요로하는 모든 매개 변수를 가지고, 원격 박스에 저장된 프로 시저를 만듭니다. 표준 연결된 서버 쿼리 (동일 반환 한 이상 위의 soultion 이상과와 코드를 훨씬 쉽게와에서 저장된 프로 시저를 호출합니다.

    예를 들면 linkedservername.database.dbo.myproc 123 'ABC', 'someparam'GETDATE ()

    그냥 옵션 ....

  5. ==============================

    5.당신이 매개 변수를해야 할 경우 당신은 또한 sp_executesql을 사용할 수 있습니다 :

    당신이 매개 변수를해야 할 경우 당신은 또한 sp_executesql을 사용할 수 있습니다 :

    BEGIN
    
    DECLARE
    @p_path varchar(200)='D:\Sample\test.xml',  
    @v_xmlfile xml,
    @v_sql nvarchar(1000)
    
    SET @v_sql=N'select @v_xmlfile= CONVERT(XML, BulkColumn) FROM 
    OPENROWSET(BULK '''+@p_path+''', SINGLE_BLOB) AS x;'
    
    EXEC sp_executesql @v_sql,N'@v_xmlfile xml output',@v_xmlfile output;
    
    SELECT @v_xmlfile
    
    END
    
  6. from https://stackoverflow.com/questions/13831472/using-a-variable-in-openrowset-query by cc-by-sa and MIT license