SQL Server Management Studio - 使用文本文件查询
SQL Server Management Studio - Query using text file
假设我有一个包含以下行的文本文件
102
333
534
然后,在我的 SQL table 中,我有几个不同的列:
AutoID | Name | Description
--------------------------------------
102 | Jackson | [Description Here]
241 | Edward | [Description Here]
333 | Timothy | [Description Here]
437 | Nikky | [Description Here]
534 | Jeremy | [Description Here]
我是否可以通过 SQL Server Management Studio 解析文本文件,以便它查询 table 并提取每个 行 有一个列(AutoID
,在本例中)匹配文本文件中的一行(注意,我只想要我指定的 table 中的行)?
这样我就可以编辑它们或更新仅与文本文件中的 ID 匹配的行。
Management Studio 中显示的行如下所示。
AutoID | NAME | Description
--------------------------------------
102 | Jackson | [Description Here]
333 | Timothy | [Description Here]
534 | Jeremy | [Description Here]
--你需要做的是将文本文件导入到你的SQL数据库中的table,然后将其值与你要查询的table进行比较(在我的例子中我称之为 AutoIDTest)。
--使用您的示例数据,我将完成此过程的以下代码放在一起。
--1。我为名为 TextImport 的文本文件的值创建了一个目标 table。我将测试文本文件命名为 E:\TestData.txt。另外,我假设这个文本文件只有一列,autoID。
--2。然后,我使用 BULK INSERT 语句将数据导入目标 table。
--3。最后,我将 TextImport 中的数据与您使用 INNER JOIN 语句从中查找值的 table 进行了比较。
CREATE TABLE AutoIDTest ---Create test table. Since your first column doesn't have a name, I'm calling it ID. I'm assuming AutoID and ID are both of type int.
(
ID int,
AutoID int,
Name varchar(25),
Description varchar(50)
)
INSERT INTO AutoIDTest -- Populate test table
VALUES
( 1, 102, 'Jackson', 'Description1'),
( 2, 241, 'Edward', 'Description2'),
( 3, 333, 'Timothy', 'Description3'),
( 4, 437, 'Nikky', 'Description4'),
( 5, 534, 'Jeremy', 'Description5')
CREATE TABLE TextImport --Create destination table for text file.
(
AutoID varchar(20),
)
BULK INSERT TextImport --Load Data from text file into TextImport table
FROM 'E:\TestData.txt' ---The name and location of my test text file.
WITH
(
ROWTERMINATOR ='\n'
);
SELECT ---Produce Output Data
ID,
t1.AutoID,
Name,
Description
FROM
AutoIDTest AS t1
INNER JOIN
TextImport AS t2
ON t1.autoID = cast(t2.autoID AS int) --convert varchar to int
输出
-- ID AutoID Name Description
-- --------- ----------- ------------------------- -------------------
-- 1 102 Jackson Description1
-- 3 333 Timothy Description3
-- 5 534 Jeremy Description5
假设我有一个包含以下行的文本文件
102
333
534
然后,在我的 SQL table 中,我有几个不同的列:
AutoID | Name | Description
--------------------------------------
102 | Jackson | [Description Here]
241 | Edward | [Description Here]
333 | Timothy | [Description Here]
437 | Nikky | [Description Here]
534 | Jeremy | [Description Here]
我是否可以通过 SQL Server Management Studio 解析文本文件,以便它查询 table 并提取每个 行 有一个列(AutoID
,在本例中)匹配文本文件中的一行(注意,我只想要我指定的 table 中的行)?
这样我就可以编辑它们或更新仅与文本文件中的 ID 匹配的行。
Management Studio 中显示的行如下所示。
AutoID | NAME | Description
--------------------------------------
102 | Jackson | [Description Here]
333 | Timothy | [Description Here]
534 | Jeremy | [Description Here]
--你需要做的是将文本文件导入到你的SQL数据库中的table,然后将其值与你要查询的table进行比较(在我的例子中我称之为 AutoIDTest)。
--使用您的示例数据,我将完成此过程的以下代码放在一起。
--1。我为名为 TextImport 的文本文件的值创建了一个目标 table。我将测试文本文件命名为 E:\TestData.txt。另外,我假设这个文本文件只有一列,autoID。
--2。然后,我使用 BULK INSERT 语句将数据导入目标 table。
--3。最后,我将 TextImport 中的数据与您使用 INNER JOIN 语句从中查找值的 table 进行了比较。
CREATE TABLE AutoIDTest ---Create test table. Since your first column doesn't have a name, I'm calling it ID. I'm assuming AutoID and ID are both of type int.
(
ID int,
AutoID int,
Name varchar(25),
Description varchar(50)
)
INSERT INTO AutoIDTest -- Populate test table
VALUES
( 1, 102, 'Jackson', 'Description1'),
( 2, 241, 'Edward', 'Description2'),
( 3, 333, 'Timothy', 'Description3'),
( 4, 437, 'Nikky', 'Description4'),
( 5, 534, 'Jeremy', 'Description5')
CREATE TABLE TextImport --Create destination table for text file.
(
AutoID varchar(20),
)
BULK INSERT TextImport --Load Data from text file into TextImport table
FROM 'E:\TestData.txt' ---The name and location of my test text file.
WITH
(
ROWTERMINATOR ='\n'
);
SELECT ---Produce Output Data
ID,
t1.AutoID,
Name,
Description
FROM
AutoIDTest AS t1
INNER JOIN
TextImport AS t2
ON t1.autoID = cast(t2.autoID AS int) --convert varchar to int
输出
-- ID AutoID Name Description
-- --------- ----------- ------------------------- -------------------
-- 1 102 Jackson Description1
-- 3 333 Timothy Description3
-- 5 534 Jeremy Description5