4

変数を OPENROWSET の SELECT ステートメントに渡そうとしていますが、エラーが発生し続けます

DECLARE @dDateTIME DATE

SET @dDateTIME = (SELECT SalesDate FROM dbo.SalesDate)

INSERT INTO dbo.tblSales
SELECT * FROM OPENROWSET('MSDASQL', 'dsn=mydsn;uid=myid;pwd=mypwd;',
    'SELECT 
        ID,
        TranDate,
        ProductID,
        CostValue,
        SalesValue,
        QtySold,
    FROM tblSales WHERE TranDate='' + @dDateTIME + ''')

DECLARE @dDateTIME DATE
SET @dDateTIME = (SELECT SalesDate FROM dbo.SalesDate)

DECLARE @SQL NVARCHAR(1024) = 
 'SELECT 
        ID,
        TranDate,
        ProductID,
        CostValue,
        SalesValue,
        QtySold,
    FROM tblSales WHERE TranDate=''' + CAST(@dDateTIME AS VARCHAR(64)) + ''''

DECLARE @RunSQL NVARCHAR(max) 
SET @RunSQL=
    'SELECT * FROM OPENROWSET (''MSDASQL'', ''dsn=mydsn;uid=myid;pwd=mypwd;'',''EXEC @SQL'')'`

に適用するにはどの構文を使用します@SQLか?

私が得るエラーは次のとおりです。

エラーは次のとおりです: リンク サーバー "(null)" の OLE DB プロバイダー "MSDASQL" がメッセージ "[Pervasive][ODBC Client Interface][LNA][Pervasive][ODBC Engine Interface]Error in predicate: TranDate = '(SELECT @ dDateTIME)'"

4

2 に答える 2

1

これを修正するために変数が文字列に連結されていません('''文字列を で閉じます')(そして必要な型変換を実行します):

DECLARE @SQL NVARCHAR(1024) = 
 'SELECT 
        ID,
        TranDate,
        ProductID,
        CostValue,
        SalesValue,
        QtySold,
    FROM tblSales WHERE TranDate=''' + CAST(@dDateTIME AS VARCHAR(64)) + ''''

さらに、式や変数を で使用することはできないため、/OPENROWSET経由で呼び出す必要があります。OPENROWSET クエリでの変数の使用EXEC()sp_executeSQL

于 2013-05-17T11:20:23.173 に答える
1

SQL ステートメントを動的に作成し、そのコマンドを実行できます。

DECLARE @dDateTIME DATE,
        @RunSQL NVARCHAR(max) 

SET @dDateTIME = (SELECT SalesDate FROM dbo.SalesDate)

SELECT @RunSQL =
  'INSERT INTO dbo.tblSales
   SELECT * FROM OPENROWSET(''MSDASQL'', ''dsn=mydsn;uid=myid;pwd=mypwd;'',
    ''SELECT 
        ID,
        TranDate,
        ProductID,
        CostValue,
        SalesValue,
        QtySold,
    FROM tblSales WHERE TranDate=''''' + CONVERT(nvarchar, @dDateTIME, 112) + ''''''')'
--PRINT @RunSQL    
EXEC sp_executesql @RunSQL 
于 2013-05-17T19:55:28.517 に答える