embulk-output-sqlserver 0.7.10 → 0.7.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -0
  3. data/build.gradle +1 -1
  4. data/classpath/{embulk-output-jdbc-0.7.10.jar → embulk-output-jdbc-0.7.11.jar} +0 -0
  5. data/classpath/{embulk-output-sqlserver-0.7.10.jar → embulk-output-sqlserver-0.7.11.jar} +0 -0
  6. data/src/main/java/org/embulk/output/SQLServerOutputPlugin.java +17 -8
  7. data/src/test/java/org/embulk/output/sqlserver/BasicTest.java +200 -0
  8. data/src/test/java/org/embulk/output/sqlserver/SQLServerTests.java +80 -0
  9. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/setup.sql +82 -0
  10. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test1.csv +4 -0
  11. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_expected.diff +2 -0
  12. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_insert.yml +2 -0
  13. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_insert_create_expected.csv +3 -0
  14. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_insert_direct.yml +2 -0
  15. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_insert_expected.csv +4 -0
  16. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_merge.csv +5 -0
  17. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_merge.yml +2 -0
  18. data/src/test/resources/{sqlserver/data/test6/test6.csv → org/embulk/output/sqlserver/test/expect/basic/test_merge_expected.csv} +6 -4
  19. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_merge_keys.yml +3 -0
  20. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_merge_rule.yml +3 -0
  21. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_merge_rule_expected.csv +6 -0
  22. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_native_insert_direct.yml +3 -0
  23. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_replace.yml +2 -0
  24. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_replace_longname.yml +2 -0
  25. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_string_timestamp.csv +4 -0
  26. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_string_timestamp.yml +5 -0
  27. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_string_timestamp_expected.csv +4 -0
  28. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_truncate_insert.yml +2 -0
  29. data/src/test/resources/org/embulk/output/sqlserver/test/expect/basic/test_truncate_insert_expected.csv +3 -0
  30. metadata +27 -27
  31. data/src/test/java/org/embulk/output/sqlserver/PreciseTime.java +0 -48
  32. data/src/test/java/org/embulk/output/sqlserver/SQLServerOutputPluginTest.java +0 -923
  33. data/src/test/resources/sqlserver/data/test1/test1.csv +0 -3
  34. data/src/test/resources/sqlserver/data/test2/test2.csv +0 -2
  35. data/src/test/resources/sqlserver/data/test3/test3.csv +0 -2
  36. data/src/test/resources/sqlserver/data/test4/test4.csv +0 -2
  37. data/src/test/resources/sqlserver/data/test5/test5.csv +0 -2
  38. data/src/test/resources/sqlserver/yml/test-insert-direct.yml +0 -43
  39. data/src/test/resources/sqlserver/yml/test-insert.yml +0 -43
  40. data/src/test/resources/sqlserver/yml/test-jtds.yml +0 -43
  41. data/src/test/resources/sqlserver/yml/test-merge-keys.yml +0 -23
  42. data/src/test/resources/sqlserver/yml/test-merge-rule.yml +0 -22
  43. data/src/test/resources/sqlserver/yml/test-merge.yml +0 -21
  44. data/src/test/resources/sqlserver/yml/test-native-date.yml +0 -26
  45. data/src/test/resources/sqlserver/yml/test-native-decimal.yml +0 -25
  46. data/src/test/resources/sqlserver/yml/test-native-integer.yml +0 -24
  47. data/src/test/resources/sqlserver/yml/test-native-string.yml +0 -25
  48. data/src/test/resources/sqlserver/yml/test-native.yml +0 -44
  49. data/src/test/resources/sqlserver/yml/test-replace-long-name.yml +0 -43
  50. data/src/test/resources/sqlserver/yml/test-replace.yml +0 -43
  51. data/src/test/resources/sqlserver/yml/test-string-timestamp.yml +0 -46
  52. data/src/test/resources/sqlserver/yml/test-truncate-insert.yml +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42a9d71ba89b5088b54354c9bcb99868a7406023
4
- data.tar.gz: d841e4d1c9238a7d2db62ee6ed09d2918903c583
3
+ metadata.gz: d8d8e2c0bbd2a1255d5825697f0c6f2e893d9753
4
+ data.tar.gz: 14ee14826f9dea6d9d5549e7bdaa41bcb01d8943
5
5
  SHA512:
6
- metadata.gz: 4b054292699bdec82190edfc751b6546b2645baf4c92d2bfb12eeeccf2d8798e4d436e1a20193b2d834663987f8207bd363610729daff458d614b227c2092350
7
- data.tar.gz: 63c96e25c33380edcb209a746ddc0956950290d80b8f71290805f053d2cf193e3544beb81872b8bed0a34d774ee3b3ed9475d63c7f7a774a0d90e5cf7d02fa6e
6
+ metadata.gz: 913d8c0c5b02f0ef7488c3063b0e022b606774c6c0856d2a78670e2119a5b7708eb88efa1f1e47e4cbe9014ecf448eb0a867bc528d6ef76e67c4f493658a437c
7
+ data.tar.gz: df036fa9b4a164a18238f56273ba578d962bc1f43d97037e9dc740aa0517fedaf624bef35443631e5df7b8afeb728712aa5d90473e38ac0ed73ec52f546261e0
data/README.md CHANGED
@@ -147,3 +147,19 @@ out:
147
147
  ```
148
148
  $ ./gradlew gem
149
149
  ```
150
+
151
+ Running tests:
152
+
153
+ You need to put 'sqljdbc41.jar' into 'embulk-output-sqlserver/driver' directory and create 'sqlserver.yml' as follows.
154
+ ```
155
+ type: sqlserver
156
+ host: localhost
157
+ port: 1433
158
+ database: database
159
+ user: user
160
+ password: pass
161
+ ```
162
+
163
+ ```
164
+ $ EMBULK_OUTPUT_SQLSERVER_TEST_CONFIG=sqlserver.yml ./gradlew :embulk-output-sqlserver:check --info
165
+ ```
data/build.gradle CHANGED
@@ -2,7 +2,7 @@ dependencies {
2
2
  compile project(':embulk-output-jdbc')
3
3
  compile 'net.sourceforge.jtds:jtds:1.3.1'
4
4
 
5
- testCompile 'org.embulk:embulk-standards:0.8.8'
5
+ testCompile 'org.embulk:embulk-standards:0.8.22'
6
6
  testCompile project(':embulk-output-jdbc').sourceSets.test.output
7
7
  testCompile files('driver/sqljdbc41.jar')
8
8
  }
@@ -28,6 +28,9 @@ import static java.util.Locale.ENGLISH;
28
28
  public class SQLServerOutputPlugin
29
29
  extends AbstractJdbcOutputPlugin
30
30
  {
31
+ // for test
32
+ public static boolean preferMicrosoftDriver = true;
33
+
31
34
  private static int DEFAULT_PORT = 1433;
32
35
 
33
36
  public interface SQLServerPluginTask
@@ -128,20 +131,26 @@ public class SQLServerOutputPlugin
128
131
  loadDriverJar(sqlServerTask.getDriverPath().get());
129
132
  try {
130
133
  Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
131
- } catch(Exception e) {
134
+ } catch (Exception e) {
132
135
  throw new ConfigException("Driver set at field 'driver_path' doesn't include Microsoft SQLServerDriver", e);
133
136
  }
134
137
  } else {
135
- // prefer Microsoft SQLServerDriver if it is in classpath
136
- try {
137
- Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
138
- } catch(Exception e) {
138
+ boolean useMicrosoftDriver = false;
139
+ if (preferMicrosoftDriver) {
140
+ // prefer Microsoft SQLServerDriver if it is in classpath
141
+ try {
142
+ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
143
+ useMicrosoftDriver = true;
144
+ } catch (Exception e) {
145
+ }
146
+ }
147
+
148
+ if (!useMicrosoftDriver) {
139
149
  logger.info("Using jTDS Driver");
140
150
  try {
141
151
  Class.forName("net.sourceforge.jtds.jdbc.Driver");
142
- } catch(Exception e2) {
143
- throw new ConfigException("'driver_path' doesn't set and can't found jTDS driver", e2);
144
-
152
+ } catch (Exception e) {
153
+ throw new ConfigException("'driver_path' doesn't set and can't find jTDS driver", e);
145
154
  }
146
155
  useJtdsDriver = true;
147
156
  }
@@ -0,0 +1,200 @@
1
+ package org.embulk.output.sqlserver;
2
+
3
+ import static org.embulk.output.sqlserver.SQLServerTests.execute;
4
+ import static org.embulk.output.sqlserver.SQLServerTests.selectRecords;
5
+ import static org.hamcrest.Matchers.is;
6
+ import static org.junit.Assert.assertThat;
7
+
8
+ import java.io.File;
9
+ import java.net.URISyntaxException;
10
+ import java.net.URL;
11
+ import java.nio.file.FileSystems;
12
+ import java.nio.file.Path;
13
+
14
+ import org.embulk.config.ConfigDiff;
15
+ import org.embulk.config.ConfigSource;
16
+ import org.embulk.output.SQLServerOutputPlugin;
17
+ import org.embulk.spi.OutputPlugin;
18
+ import org.embulk.test.EmbulkTests;
19
+ import org.embulk.test.TestingEmbulk;
20
+ import org.junit.Before;
21
+ import org.junit.Rule;
22
+ import org.junit.Test;
23
+
24
+ import com.google.common.io.Resources;
25
+
26
+ public class BasicTest
27
+ {
28
+ private static final String BASIC_RESOURCE_PATH = "org/embulk/output/sqlserver/test/expect/basic/";
29
+
30
+ private static ConfigSource loadYamlResource(TestingEmbulk embulk, String fileName)
31
+ {
32
+ return embulk.loadYamlResource(BASIC_RESOURCE_PATH + fileName);
33
+ }
34
+
35
+ private static String readResource(String fileName)
36
+ {
37
+ return EmbulkTests.readResource(BASIC_RESOURCE_PATH + fileName);
38
+ }
39
+
40
+ @Rule
41
+ public TestingEmbulk embulk = TestingEmbulk.builder()
42
+ .registerPlugin(OutputPlugin.class, "sqlserver", SQLServerOutputPlugin.class)
43
+ .build();
44
+
45
+ private ConfigSource baseConfig;
46
+
47
+ @Before
48
+ public void setup()
49
+ {
50
+ baseConfig = SQLServerTests.baseConfig();
51
+ execute(readResource("setup.sql")); // setup rows
52
+ }
53
+
54
+ @Test
55
+ public void testInsert() throws Exception
56
+ {
57
+ Path in1 = toPath("test1.csv");
58
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert.yml")), in1);
59
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_insert_expected.csv")));
60
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
61
+ }
62
+
63
+ @Test
64
+ public void testInsertCreate() throws Exception
65
+ {
66
+ execute("DROP TABLE TEST1");
67
+
68
+ Path in1 = toPath("test1.csv");
69
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert.yml")), in1);
70
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_insert_create_expected.csv")));
71
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
72
+ }
73
+
74
+ @Test
75
+ public void testInsertDirect() throws Exception
76
+ {
77
+ Path in1 = toPath("test1.csv");
78
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert_direct.yml")), in1);
79
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_insert_expected.csv")));
80
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
81
+ }
82
+
83
+ @Test
84
+ public void testInsertDirectCreate() throws Exception
85
+ {
86
+ execute("DROP TABLE TEST1");
87
+
88
+ Path in1 = toPath("test1.csv");
89
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert_direct.yml")), in1);
90
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_insert_create_expected.csv")));
91
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
92
+ }
93
+
94
+ @Test
95
+ public void testTruncateInsert() throws Exception
96
+ {
97
+ Path in1 = toPath("test1.csv");
98
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_truncate_insert.yml")), in1);
99
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_truncate_insert_expected.csv")));
100
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
101
+ }
102
+
103
+ @Test
104
+ public void testReplace() throws Exception
105
+ {
106
+ Path in1 = toPath("test1.csv");
107
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_replace.yml")), in1);
108
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_insert_create_expected.csv")));
109
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
110
+ }
111
+
112
+ @Test
113
+ public void testReplaceCreate() throws Exception
114
+ {
115
+ execute("DROP TABLE TEST1");
116
+
117
+ Path in1 = toPath("test1.csv");
118
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_replace.yml")), in1);
119
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_insert_create_expected.csv")));
120
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
121
+ }
122
+
123
+ @Test
124
+ public void testReplaceLongName() throws Exception
125
+ {
126
+ String tableName = "TEST___A123456789B123456789C123456789D123456789E123456789F123456789G123456789H123456789I123456789J123456789K123456789L123456789";
127
+ assertThat(tableName.length(), is(127));
128
+
129
+ Path in1 = toPath("test1.csv");
130
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_replace_longname.yml")), in1);
131
+ assertThat(selectRecords(embulk, tableName), is(readResource("test_insert_create_expected.csv")));
132
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
133
+ }
134
+
135
+ @Test
136
+ public void testMerge() throws Exception
137
+ {
138
+ Path in1 = toPath("test_merge.csv");
139
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_merge.yml")), in1);
140
+ assertThat(selectRecords(embulk, "TEST_MERGE1"), is(readResource("test_merge_expected.csv")));
141
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
142
+ }
143
+
144
+ @Test
145
+ public void testMergeWithKeys() throws Exception
146
+ {
147
+ Path in1 = toPath("test_merge.csv");
148
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_merge_keys.yml")), in1);
149
+ assertThat(selectRecords(embulk, "TEST_MERGE2"), is(readResource("test_merge_expected.csv")));
150
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
151
+ }
152
+
153
+ @Test
154
+ public void testMergeWithRule() throws Exception
155
+ {
156
+ Path in1 = toPath("test_merge.csv");
157
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_merge_rule.yml")), in1);
158
+ assertThat(selectRecords(embulk, "TEST_MERGE1"), is(readResource("test_merge_rule_expected.csv")));
159
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
160
+ }
161
+
162
+ @Test
163
+ public void testNativeInsertDirect() throws Exception
164
+ {
165
+ Path in1 = toPath("test1.csv");
166
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_native_insert_direct.yml")), in1);
167
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_insert_expected.csv")));
168
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
169
+ }
170
+
171
+ @Test
172
+ public void testStringToTimestamp() throws Exception
173
+ {
174
+ Path in1 = toPath("test_string_timestamp.csv");
175
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_string_timestamp.yml")), in1);
176
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_string_timestamp_expected.csv")));
177
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
178
+ }
179
+
180
+ @Test
181
+ public void testJtds() throws Exception
182
+ {
183
+ SQLServerOutputPlugin.preferMicrosoftDriver = false;
184
+ try {
185
+ Path in1 = toPath("test1.csv");
186
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert.yml")), in1);
187
+ assertThat(selectRecords(embulk, "TEST1"), is(readResource("test_insert_expected.csv")));
188
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
189
+ } finally {
190
+ SQLServerOutputPlugin.preferMicrosoftDriver = true;
191
+ }
192
+ }
193
+
194
+ private Path toPath(String fileName) throws URISyntaxException
195
+ {
196
+ URL url = Resources.getResource(BASIC_RESOURCE_PATH + fileName);
197
+ return FileSystems.getDefault().getPath(new File(url.toURI()).getAbsolutePath());
198
+ }
199
+
200
+ }
@@ -0,0 +1,80 @@
1
+ package org.embulk.output.sqlserver;
2
+
3
+ import static java.util.Locale.ENGLISH;
4
+
5
+ import java.io.IOException;
6
+ import java.nio.charset.Charset;
7
+ import java.nio.file.Files;
8
+ import java.nio.file.Path;
9
+ import java.util.Collections;
10
+ import java.util.List;
11
+
12
+ import org.embulk.config.ConfigSource;
13
+ import org.embulk.test.EmbulkTests;
14
+ import org.embulk.test.TestingEmbulk;
15
+
16
+ import com.google.common.base.Throwables;
17
+ import com.google.common.collect.ImmutableList;
18
+ import com.google.common.io.ByteStreams;
19
+
20
+ public class SQLServerTests
21
+ {
22
+ public static ConfigSource baseConfig()
23
+ {
24
+ return EmbulkTests.config("EMBULK_OUTPUT_SQLSERVER_TEST_CONFIG");
25
+ }
26
+
27
+ public static void execute(String sql, String... options)
28
+ {
29
+ ConfigSource config = baseConfig();
30
+
31
+ ImmutableList.Builder<String> args = ImmutableList.builder();
32
+ args.add("sqlcmd")
33
+ .add("-U")
34
+ .add(config.get(String.class, "user"))
35
+ .add("-P")
36
+ .add(config.get(String.class, "password"))
37
+ .add("-H")
38
+ .add(config.get(String.class, "host"))
39
+ .add("-d")
40
+ .add(config.get(String.class, "database"))
41
+ .add("-Q")
42
+ .add(sql);
43
+ for (String option : options) {
44
+ args.add(option);
45
+ }
46
+
47
+ ProcessBuilder pb = new ProcessBuilder(args.build());
48
+ pb.redirectErrorStream(true);
49
+ int code;
50
+ try {
51
+ Process process = pb.start();
52
+ ByteStreams.copy(process.getInputStream(), System.out);
53
+ code = process.waitFor();
54
+ } catch (IOException | InterruptedException ex) {
55
+ throw Throwables.propagate(ex);
56
+ }
57
+ if (code != 0) {
58
+ throw new RuntimeException(String.format(ENGLISH,
59
+ "Command finished with non-zero exit code. Exit code is %d.", code));
60
+ }
61
+ }
62
+
63
+ public static String selectRecords(TestingEmbulk embulk, String tableName) throws IOException
64
+ {
65
+ Path temp = embulk.createTempFile("txt");
66
+ Files.delete(temp);
67
+
68
+ // should not use UTF8 because of BOM
69
+ execute("SET NOCOUNT ON; SELECT * FROM " + tableName, "-h", "-1", "-s", ",", "-W", "-f", "932", "-o", temp.toString());
70
+
71
+ List<String> lines = Files.readAllLines(temp, Charset.forName("MS932"));
72
+ Collections.sort(lines);
73
+ StringBuilder sb = new StringBuilder();
74
+ for (String line : lines) {
75
+ sb.append(line);
76
+ sb.append("\n");
77
+ }
78
+ return sb.toString();
79
+ }
80
+ }
@@ -0,0 +1,82 @@
1
+ DROP TABLE TEST1
2
+ CREATE TABLE TEST1 (
3
+ ID CHAR(4),
4
+ TINYINT_ITEM TINYINT,
5
+ SMALLINT_ITEM SMALLINT,
6
+ INT_ITEM INT,
7
+ BIGINT_ITEM BIGINT,
8
+ BIT_ITEM BIT,
9
+ DECIMAL_ITEM DECIMAL(12,2),
10
+ NUMERIC_ITEM NUMERIC(5,3),
11
+ SMALLMONEY_ITEM SMALLMONEY,
12
+ MONEY_ITEM MONEY,
13
+ REAL_ITEM REAL,
14
+ FLOAT_ITEM FLOAT,
15
+ CHAR_ITEM CHAR(4),
16
+ VARCHAR_ITEM VARCHAR(8),
17
+ TEXT_ITEM TEXT,
18
+ NCHAR_ITEM NCHAR(4),
19
+ NVARCHAR_ITEM NVARCHAR(8),
20
+ NTEXT_ITEM NTEXT,
21
+ DATE_ITEM DATE,
22
+ DATETIME_ITEM DATETIME,
23
+ DATETIME2_ITEM DATETIME2,
24
+ DATETIME2_2_ITEM DATETIME2(2),
25
+ SMALLDATETIME_ITEM SMALLDATETIME,
26
+ TIME_ITEM TIME,
27
+ TIME_2_ITEM TIME(2),
28
+ PRIMARY KEY (ID)
29
+ );
30
+ INSERT INTO TEST1(ID) VALUES('9999');
31
+
32
+ DROP TABLE TEST___A123456789B123456789C123456789D123456789E123456789F123456789G123456789H123456789I123456789J123456789K123456789L123456789
33
+ CREATE TABLE TEST___A123456789B123456789C123456789D123456789E123456789F123456789G123456789H123456789I123456789J123456789K123456789L123456789 (
34
+ ID CHAR(4),
35
+ TINYINT_ITEM TINYINT,
36
+ SMALLINT_ITEM SMALLINT,
37
+ INT_ITEM INT,
38
+ BIGINT_ITEM BIGINT,
39
+ BIT_ITEM BIT,
40
+ DECIMAL_ITEM DECIMAL(12,2),
41
+ NUMERIC_ITEM NUMERIC(5,3),
42
+ SMALLMONEY_ITEM SMALLMONEY,
43
+ MONEY_ITEM MONEY,
44
+ REAL_ITEM REAL,
45
+ FLOAT_ITEM FLOAT,
46
+ CHAR_ITEM CHAR(4),
47
+ VARCHAR_ITEM VARCHAR(8),
48
+ TEXT_ITEM TEXT,
49
+ NCHAR_ITEM NCHAR(4),
50
+ NVARCHAR_ITEM NVARCHAR(8),
51
+ NTEXT_ITEM NTEXT,
52
+ DATE_ITEM DATE,
53
+ DATETIME_ITEM DATETIME,
54
+ DATETIME2_ITEM DATETIME2,
55
+ DATETIME2_2_ITEM DATETIME2(2),
56
+ SMALLDATETIME_ITEM SMALLDATETIME,
57
+ TIME_ITEM TIME,
58
+ TIME_2_ITEM TIME(2),
59
+ PRIMARY KEY (ID)
60
+ );
61
+ INSERT INTO TEST___A123456789B123456789C123456789D123456789E123456789F123456789G123456789H123456789I123456789J123456789K123456789L123456789(ID) VALUES('9999');
62
+
63
+ DROP TABLE TEST_MERGE1;
64
+ CREATE TABLE TEST_MERGE1 (
65
+ ITEM1 INT,
66
+ ITEM2 INT,
67
+ ITEM3 VARCHAR(4),
68
+ PRIMARY KEY(ITEM1, ITEM2)
69
+ );
70
+ INSERT INTO TEST_MERGE1 VALUES(10, 20, 'A');
71
+ INSERT INTO TEST_MERGE1 VALUES(10, 21, 'B');
72
+ INSERT INTO TEST_MERGE1 VALUES(11, 20, 'C');
73
+
74
+ DROP TABLE TEST_MERGE2;
75
+ CREATE TABLE TEST_MERGE2 (
76
+ ITEM1 INT,
77
+ ITEM2 INT,
78
+ ITEM3 VARCHAR(4)
79
+ );
80
+ INSERT INTO TEST_MERGE2 VALUES(10, 20, 'A');
81
+ INSERT INTO TEST_MERGE2 VALUES(10, 21, 'B');
82
+ INSERT INTO TEST_MERGE2 VALUES(11, 20, 'C');