首页 > 解决方案 > 将各种表中的日期存储到 tmp 中的动态查询会产生 NULL

问题描述

故事:

试图从各种表中获取列的最小日期(列名具有相同的名称)。

我想出了如何获取值,但将值存储在 tmp 表中不起作用。

目前只在一张桌子上尝试,看看机制是否有效。

我有的:

create table #t2 (date datetime)
declare @date datetime, @sql nvarchar(max);
begin
    set @sql = 'SELECT MAX(insert_stamp) FROM game_install'+';'
    exec sp_executesql @sql, N'@x datetime out', @date out
    insert into #t2 SELECT @date
end

select * from #t2

结果是:

+-------------------------+
|    (No column name)     |
+-------------------------+
| 2019-07-24 04:16:06.000 |
+-------------------------+

+------+
| date |
+------+
| NULL |
+------+

为什么表格中没有填充日期结果?

标签: sqlsql-servertsqlparameters

解决方案


您需要分配变量,即@x =在选择中

也是列出要插入的列的最佳实践。

create table #t2 (date datetime)
declare @date datetime, @sql nvarchar(max);

begin
    set @sql = 'SELECT @x = MAX(created) FROM proposal'+';'
    exec sp_executesql @sql, N'@x datetime out', @date out
    insert into #t2(date) SELECT @date
end

--  But you can also do it in one statement
begin
    set @sql = 'insert into #t2 (date) SELECT MAX(created) FROM proposal'+';'
    exec sp_executesql @sql, N'@date datetime out', @date out
end

select * from #t2

drop table #t2

给出:

date
2019-11-28 19:40:00.000
2019-11-28 19:40:00.000

推荐阅读