<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>simple idea &#187; SQL Server</title>
	<atom:link href="http://www.k14a.net/archives/tag/sql-server/feed" rel="self" type="application/rss+xml" />
	<link>http://www.k14a.net</link>
	<description>simple is beautiful</description>
	<lastBuildDate>Tue, 10 Aug 2010 08:55:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>SQL Serverのインポートにハマる</title>
		<link>http://www.k14a.net/archives/190</link>
		<comments>http://www.k14a.net/archives/190#comments</comments>
		<pubDate>Sun, 17 May 2009 13:59:30 +0000</pubDate>
		<dc:creator>moriken</dc:creator>
				<category><![CDATA[DB]]></category>
		<category><![CDATA[SQL Server]]></category>

		<guid isPermaLink="false">http://www.k14a.net/?p=190</guid>
		<description><![CDATA[

フロントエンドがAccess2003、バックエンドがWindows NT Server + SQL Server7で稼動しているシステムのバックエンドをWindows 2008 Server(64bit) + SQL [...]]]></description>
			<content:encoded><![CDATA[
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fwww.k14a.net%252Farchives%252F190%22%2C%20%22style%22%3A%20%22small%22%2C%20%22title%22%3A%20%22SQL%20Server%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AB%E3%83%8F%E3%83%9E%E3%82%8B%22%20%7D);"></div>
<p>フロントエンドがAccess2003、バックエンドがWindows NT Server + SQL Server7で稼動しているシステムのバックエンドをWindows 2008 Server(64bit) + SQL Server 2008へ移行する仕事をしている。</p>
<p>基本的には、本社で環境構築&amp;動作確認とAccess2003の小修正を行い、客先へ納品する。本社での作業についてはほぼ終了し、客先へ設置を行い、最終的に現在稼動している旧DBの内容を新DBへインポートをおこなう。</p>
<p>SQL Serverには、インポートプログラムがあるので、ネットワーク上にある旧DBのデータを新DBへ一気にインポートを行うことができる。幸いデータ量もあまり多くはないので、インポート自体は約10分程で終了。あとは、ユーザによる動作確認を行ってもらう段階を残すのみとなった。</p>
<p>が、ユーザの確認を開始した直後に、Accessのエラーメッセージが表示され、クエリが実行できないらしい。調べてみると、旧DBではvarchar(255)のフィールドが、新DBではnvarchar(510)になっていることが原因と判明。最初は、64ビットのインポートツールを使っているから勝手に拡張されたのかと思い、32ビットのインポートツールでやってみても結果は同じ。</p>
<p>念のため、インポート時にエラーが発生しているカラムのサイズを手動で255にするとエラーが出なくなったことから、このデータサイズ変換が原因であることは間違いない……ことまではわかったが、今日は時間切れで終了。</p>
<p>そもそも、nvarcharとは何か調べてみると、</p>
<blockquote><p><a href="http://msdn.microsoft.com/ja-jp/library/ms186939.aspx">nchar および nvarchar (Transact-SQL)</a><br />
固定長 (nchar) または可変長 (nvarchar) の Unicode データで、UNICODE UCS-2 文字セットを使用する文字データ型です。</p></blockquote>
<p>で、数値にはサイズ(バイト数)ではなく、<span style="color: #ff0000;">桁数</span>を指定するらしい。と、言うことは文字をUnicodeで格納するために桁数を拡張したため、AccessではJoinできなくなった模様。<br />
回避策としては、新DBの文字コードをCP932にするか、インポート時にカラムのサイズを255にするかしかないのかなぁ…。</p>
<p>問題が発生している箇所は、コードを入れているので、255桁も使用することがないようなので、たぶん問題はないと考えている。<br />
そもそもなんでコードにvarchar(255)なんて指定の仕方をしているんだ?当時の設計者出て来い!!</p>
<p>桁数固定のコードには、char(桁数)を使うのが普通(百歩譲ってvarchar(桁数))と思っている自分は古い人間?</p>

]]></content:encoded>
			<wfw:commentRss>http://www.k14a.net/archives/190/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
