2017-04-17 92 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

相關問題