2017-04-17 91 views
0

下面的查询是直接从现有数据库的具体数据:插入解析从一个数据库中的数据到另一个

SELECT (
    SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'File Name') AS File_Name, 
    (SELECT AttributeData FROM SQLTable WHERE AttributeName = 'Version Number') AS Version, 
    (SELECT 'Category Name') AS Category, 
    CAST(LEFT((SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'), 
    CHARINDEX('m', (SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'),1)-2) AS float) AS Value, 
    GETDATE() AS Date 
FROM SQLTable2 
GROUP BY FinalDisposition 

UNION 

SELECT (
    SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'File Name') AS File_Name, 
    (SELECT AttributeData FROM SQLTable WHERE AttributeName = 'Version Number') AS Version, 
    (SELECT 'Category Name') AS Category, 
    CAST(LEFT((SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'), 
    CHARINDEX('m', (SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'),1)-2) AS float) AS Value, 
    GETDATE() AS Date 
FROM SQLTable2 
GROUP BY FinalDisposition 

UNION 

SELECT (
    SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'File Name') AS File_Name, 
    (SELECT AttributeData FROM SQLTable WHERE AttributeName = 'Version Number') AS Version, 
    (SELECT 'Category Name') AS Category, 
    CAST(LEFT((SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'), 
    CHARINDEX('m', (SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'),1)-2) AS float) AS Value, 
    GETDATE() AS Date 
FROM SQLTable2 
GROUP BY FinalDisposition 

这将创建一个表,看起来像这样:

| File_Name | Version | Category | Value |   Date   | 
|:---------:|:-------:|:----------:|:-----:|:-----------------------:| 
| File1  | 1.0.1 | Duration 1 | 0.04 | 2017-04-17 12:00:00.000 | 
| File2  | 1.0.1 | Duration 2 | 0.008 | 2017-04-17 12:00:00.000 | 
| File3  | 1.0.1 | Duration 3 | 0.066 | 2017-04-17 12:00:00.000 | 

作为一个侧面说明,值为“额外”位的原因是因为原始数据的格式如下所示:0.04 minutes0.008 minutes0.066 minutes。我想摆脱会议记录并将其作为一个浮点数。

如何将该数据插入到另一个表中(我已经将该表与我要插入的表格以相同列格式存储)。

或者换句话说,我怎么可以移动到信息的INSERT语句是这样的:

INSERT INTO [Database].dbo.SQLTable3(File_Name,Version,Category,Value,Date) 
+2

您是否尝试过在你的查询的顶部添加此插入行? – McNets

+0

好吧...你可以把它放到一个#temp表中,然后做一个简单的'INSERT INTO ... SELECT ... FROM ...'我说使用临时表,因为你从其他服务器拉。 – scsimon

+0

如果您将第二行添加到SQLTable或SQLTable1,这将因为您的子查询将返回多于一行而中断。 –

回答

0
INSERT INTO SQLTable3 
    SELECT * 
    FROM( 

      SELECT (
       SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'File Name') AS File_Name, 
       (SELECT AttributeData FROM SQLTable WHERE AttributeName = 'Version Number') AS Version, 
       (SELECT 'Category Name') AS Category, 
       CAST(LEFT((SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'), 
       CHARINDEX('m', (SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'),1)-2) AS float) AS Value, 
       GETDATE() AS Date 
      FROM SQLTable2 
      GROUP BY FinalDisposition 

      UNION 

      SELECT (
       SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'File Name') AS File_Name, 
       (SELECT AttributeData FROM SQLTable WHERE AttributeName = 'Version Number') AS Version, 
       (SELECT 'Category Name') AS Category, 
       CAST(LEFT((SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'), 
       CHARINDEX('m', (SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'),1)-2) AS float) AS Value, 
       GETDATE() AS Date 
      FROM SQLTable2 
      GROUP BY FinalDisposition 

      UNION 

      SELECT (
       SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'File Name') AS File_Name, 
       (SELECT AttributeData FROM SQLTable WHERE AttributeName = 'Version Number') AS Version, 
       (SELECT 'Category Name') AS Category, 
       CAST(LEFT((SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'), 
       CHARINDEX('m', (SELECT AttributeData FROM SQLTable1 WHERE AttributeName = 'Duration 1'),1)-2) AS float) AS Value, 
       GETDATE() AS Date 
      FROM SQLTable2 
      GROUP BY FinalDisposition)X 
+0

好吧,创建表的原始代码可以正常工作,'SELECT * FROM(来自问题的代码)X'生成的代码与问题中的代码相同,但是当您添加插入语句时,它会给出错误:'Msg 8152 ,级别16,状态4,行9字符串或二进制数据将被截断。该声明已被终止。“# – Neal

+0

@Neal你需要制作更大的一列。您尝试插入的数据大于您允许表SQLTable3上该列的数据。防爆。如果你的列是一个字符串varchar(10),并且你试图插入一个12个字符的字符串,它会抛出该错误。你将不得不弄清楚它是什么列 – kegs88

相关问题