Sql server 使用带条件的循环插入行

Sql server 使用带条件的循环插入行,sql-server,Sql Server,我有这样的tbl_emp: empid 1 2 3 4 empid workingdate 1 2017-05-11 2 2017-05-13 3 2017-05-14 ........... ........... empid workingdate 1 2017-05-22 2 2017-05-22 3 2017-05-22 和tbl_att这样: empid 1 2

我有这样的
tbl_emp

empid
1  
2
3
4
empid     workingdate
1         2017-05-11
2         2017-05-13
3         2017-05-14
...........
...........
empid     workingdate
1         2017-05-22
2         2017-05-22
3         2017-05-22
tbl_att
这样:

empid
1  
2
3
4
empid     workingdate
1         2017-05-11
2         2017-05-13
3         2017-05-14
...........
...........
empid     workingdate
1         2017-05-22
2         2017-05-22
3         2017-05-22
我在SQL Server代理中有一个作业,每个星期天执行步骤,我希望该作业在
tbl_att
中为当天的每个
empid
插入一行。假设周日是2017年5月22日,我希望它是这样的:

empid
1  
2
3
4
empid     workingdate
1         2017-05-11
2         2017-05-13
3         2017-05-14
...........
...........
empid     workingdate
1         2017-05-22
2         2017-05-22
3         2017-05-22
这意味着我希望它在同一天(任务执行日)为所有
empid
插入
tbl_att
,所以有人能给我提供一个需要输入step命令的查询吗?

试试这个

INSERT INTO tbl_att SELECT empid,CAST(GETDATE() AS DATE) FROM tbl_emp;
试试这个

INSERT INTO tbl_att SELECT empid,CAST(GETDATE() AS DATE) FROM tbl_emp;
由于您在每个星期天运行作业,我相信上面的查询将按照您的期望插入数据。仅供参考,但这取决于系统日期

由于您在每个星期天运行作业,我相信上面的查询将按照您的期望插入数据。仅供参考,但这取决于系统日期

希望对您有所帮助

CREATE TABLE #tbl_att (empid INT,workingdate DATE)

CREATE TABLE #EmpidTab (empid INT)

INSERT INTO #EmpidTab
SELECT 1 UNION ALL 
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4
SELECT * FROM #EmpidTab

INSERT INTO #EmpidTab
SELECT 5

INSERT INTO #tbl_att
SELECT Empid
    ,Getdate() AS workingdate
FROM #EmpidTab i
WHERE NOT EXISTS (
        SELECT 1
        FROM #tbl_att t
        WHERE t.empid = i.Empid
        ) --Eliminate duplicte insertion of empid's 

SELECT @@ROWCOUNT AS NoRowsInserted

SELECT *
FROM #tbl_att
希望对你有帮助

CREATE TABLE #tbl_att (empid INT,workingdate DATE)

CREATE TABLE #EmpidTab (empid INT)

INSERT INTO #EmpidTab
SELECT 1 UNION ALL 
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4
SELECT * FROM #EmpidTab

INSERT INTO #EmpidTab
SELECT 5

INSERT INTO #tbl_att
SELECT Empid
    ,Getdate() AS workingdate
FROM #EmpidTab i
WHERE NOT EXISTS (
        SELECT 1
        FROM #tbl_att t
        WHERE t.empid = i.Empid
        ) --Eliminate duplicte insertion of empid's 

SELECT @@ROWCOUNT AS NoRowsInserted

SELECT *
FROM #tbl_att


听起来像一个简单的update语句行还不存在,我们如何使用update语句?如果它不存在。。。为什么日期不同?这是以前的数据,我想要的是为每个星期天向表中插入新行,而不是将现有记录更新为星期天兄弟/姐妹。您尝试了什么insert语句?它插入记录了吗?您看到了什么错误?听起来像是一个简单的update语句行还不存在,我们如何使用update语句?如果它不存在。。。为什么日期不同?这是以前的数据,我想要的是为每个星期天向表中插入新行,而不是将现有记录更新为星期天兄弟/姐妹。您尝试了什么insert语句?它插入记录了吗?您看到了什么错误?但是您能解释一下这行查询吗?Getdate将获取当前系统日期。由于您在星期天运行,它将获取星期天的等效系统日期。感谢您的解释。您如何消除不插入的重复记录?但您能否解释一下这行查询?Getdate将获取当前系统日期。由于您在周日运行,它将获取与周日相同的系统日期。感谢您的解释如何消除不插入的重复记录