2014-11-24 38 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