2016-09-07 1 views
0

Microsoft SQL Server 2014を使用してクライアントの課金データからカスタムテーブルをセットアップしようとしています。私はリンクサーバーをセットアップしました。私は今何をしようとしているのですが、私は手動で(私は生データだけで作業している)リンクサーバーからのデータで私のカスタムテーブルを更新するために実行できるスクリプトを作成します。新しい列の同じ表に表示されるデータを検索します。ここでリンクサーバーのデータを含むテーブルを作成し、収集したデータの一部にカスタム数式列を作成する

は、私が現在SOFAR完了してしまったコードです:

USE DVreports 
DROP TABLE DVreports.dbo.DV_UnitPOInvoice 

CREATE TABLE dbo.DV_UnitPOInvoice (
    UnitID varchar(35) null, 
    UnitPOInvoiceID int not null, 
    InvoiceID varchar(35) not null, 
    InvoiceNum varchar(20) null, 
    InvoiceDate datetime not null, 
    Status varchar(20) null, 
    Total money null, 
    AmountPaid money null, 
    Paid bit not null, 
    LastModifiedOn datetime not null 
    ); 
GO 


INSERT INTO dbo.DV_UnitPOInvoice (UnitID, UnitPOInvoiceID, InvoiceID, InvoiceDate, Status, Total, AmountPaid, Paid, LastModifiedOn) 
SELECT UnitPOInvoiceItem.UnitID, 
     UnitPOInvoice.UnitPOInvoiceID, 
     UnitPOInvoice.InvoiceID, 
     UnitPOInvoice.InvoiceDate, 
     UnitPOInvoice.Status, 
     UnitPOInvoice.Total, 
     UnitPOInvoice.AmountPaid, 
     UnitPOInvoice.Paid, 
     UnitPOInvoice.LastModifiedOn 
FROM [HDE-SERVER].[FCIDealerVu].[dbo].[UnitPOInvoice], [HDE-SERVER].[FCIDealerVu].[dbo].[UnitPOInvoiceItem] 
WHERE UnitPOInvoice.UnitPOInvoiceID = UnitPOInvoiceItem.UnitPOInvoiceID AND 
     UnitPOInvoiceItem.UnitID>'59000' 


INSERT INTO dbo.DV_UnitPOInvoice (InvoiceNum) 
SELECT LEFT([DV_UnitPOInvoice].[InvoiceID], isnull((CHARINDEX('-',[DV_UnitPOInvoice].[InvoiceID]-1)) - 1, 10)) FROM [DV_UnitPOInvoice] 

私はこれを実行すると、私はエラーを取得:

(2504 row(s) affected) 
Msg 245, Level 16, State 1, Line 34 
Conversion failed when converting the varchar value '195849-955648' to data type int. 

カスタム列がNULL可能とvarchar(20)のデータにする必要がありますタイプには、数字または文字のいずれかを含めることができます。ソースデータから見えるものに応じて空白にしてください。

私はまだプログラミングに慣れていないので、これは大丈夫です。私はまだ自分自身を教えることに取り組んでいます。

答えて

0
  1. このエラーには関係ありませんが、リンクサーバーを誤って使用しています。 SERVER_NAME.DB_NAME.SCHEMA.TABLE表記を使用してリモート・サーバーから供給された表を結合することは強く推奨されません。 OPENQUERYを使用して、2つの表をプルしてローカルに結合するのではなく、リモート・サーバーで問合せを実行する必要があります。

  2. エラーの説明から、最初の挿入が成功したことがわかります((2504行は影響を受けます))。問題は2番目の問題です。私はこの問題はここにあると思う:

    [DV_UnitPOInvoice] [InvoiceID] -1 [DV_UnitPOInvoice]として

[InvoiceID] varchar型です。。。

+0

リンクサーバーの使用に関する洞察力。私はまだ学んでいます、そしてまだ学ぶことがたくさんあります。 OPENQUERY関数を正しく使う方法を見ていきます。そして、エラーで、あなたが言及した方法でそれを変更しようとしましたが、それでも完全には動作しませんでした。しかしそれは別のエラーだった。私はあなたに正確なメッセージを得るためにエラーを再作成しようとします(私はいくつかのことを試みましたが、メッセージは記録しませんでした)。しかし、私が新しい誤りから覚えている主な部分は、私が数式から否定的な結果を得ることができなかったということでした。 – Jay

+0

そのエラーも予想されました。文字列が見つからない場合、CHARINDEX()は0(NULLではない)を返します。 LEFT関数に負のパラメータがあるのは、これが理由です。 CASE WHEN ... THEN ... ELSE ... END、またはNULLIF(CHARINDEX(...)、0)関数を使用することができます。関数 - NULLIFは、CHARINDEXがゼロを返すときにNULLを返します。 – Anton

関連する問題