2014-11-24 34 views
0

我不是SQL查詢的熟練編碼人員,所以我需要一些幫助。
這是我的嘗試:
由批處理文件執行的動態SQL聲明

DECLARE @ID AS varchar(max) = 'SELECT ID FROM Price WHERE ID = ''123456'''; 
DECLARE @VALUE as varchar(max) = 'SELECT TOP 1 Value FROM PriceData WHERE PriceID=''@ID' ORDER BY UpdatedOn DESC'; 

INSERT INTO PriceData VALUES (@ID,CAST(GETDATE() AS DATE),@VALUE,GETDATE()) 

所以essicently我有兩個表的價格和PRICEDATA。 PRICE有我想要的ID'123456'的PriceID,所以我將decalre作爲@ID,然後VALUE是來自PriceData的ID'123456'的最新值,所以我按降序排列並獲得第一個元素,然後我使用今天的新值插入PriceData。顯然這是行不通的我試着在EXEC(@SQL)附近玩這個腳本,但是那也行不通。我在這裏做錯了什麼?

PS:@ID必須是BIGINT和@VALUE必須是浮動,但由於我宣佈SQL語句,我不得不讓他們VARCHAR的時刻

PSS:也爲Im保存該SQL腳本作爲SQL文件並在批處理文件中運行此命令
sqlcmd -S「db」-i「C:\ MYSQL.sql」

+0

我刪除了'mysql'標記。據我所知,這個問題是關於Microsoft SQL Server的,它與MySQL無關。 – 2014-11-24 18:13:44

+0

我刪除了'batch-file'標籤。該標籤旨在用於Windows控制檯的'.bat'腳本。 – rojo 2014-11-24 18:37:23

回答

3

我不認爲您需要動態SQL或任何變量。只是一個Insert from select應該工作

INSERT INTO PriceData 
SELECT TOP 1 P.ID, 
      Cast(Getdate() AS DATE), 
      Value, 
      Getdate() 
FROM PriceData PD 
     JOIN Price P 
     ON P.ID = PD.PriceID 
WHERE ID = '123456' 
ORDER BY PD.UpdatedOn DESC 
+0

工作!非常感謝 – 2014-11-24 19:34:58