我不是一个熟练的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())
所以我有两张桌PRICE和PRICEDATA。 PRICE具有我想要的ID ID'123456'所以我将其作为@ID进行十进制,然后VALUE是来自PriceData的最新值ID为'123456'所以我按降序排序并得到第一个元素,然后我使用今天的新值插入PriceData。显然这不起作用我试着玩EXEC(@SQL)之后我继续附加脚本但是也没有用。我在这里做错了什么?
PS:@ID必须是BIGINT,而@VALUE必须是FLOAT但是因为我声明了SQL语句,我现在必须让它们变成varchar
PSS:我也将此sql脚本保存为SQL文件并在批处理文件中运行此命令
sqlcmd -S“db”-i“C:\ MYSQL.sql”
答案 0 :(得分: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