批处理文件执行的动态SQL声明

时间:2014-11-24 18:03:20

标签: sql-server

我不是一个熟练的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”

1 个答案:

答案 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