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)のデータにする必要がありますタイプには、数字または文字のいずれかを含めることができます。ソースデータから見えるものに応じて空白にしてください。
私はまだプログラミングに慣れていないので、これは大丈夫です。私はまだ自分自身を教えることに取り組んでいます。
リンクサーバーの使用に関する洞察力。私はまだ学んでいます、そしてまだ学ぶことがたくさんあります。 OPENQUERY関数を正しく使う方法を見ていきます。そして、エラーで、あなたが言及した方法でそれを変更しようとしましたが、それでも完全には動作しませんでした。しかしそれは別のエラーだった。私はあなたに正確なメッセージを得るためにエラーを再作成しようとします(私はいくつかのことを試みましたが、メッセージは記録しませんでした)。しかし、私が新しい誤りから覚えている主な部分は、私が数式から否定的な結果を得ることができなかったということでした。 – Jay
そのエラーも予想されました。文字列が見つからない場合、CHARINDEX()は0(NULLではない)を返します。 LEFT関数に負のパラメータがあるのは、これが理由です。 CASE WHEN ... THEN ... ELSE ... END、またはNULLIF(CHARINDEX(...)、0)関数を使用することができます。関数 - NULLIFは、CHARINDEXがゼロを返すときにNULLを返します。 – Anton