Insert Into Select 存储过程无法插入 NULL
Insert Into Select stored procedure not working inserting NULL
我第一次在这里创建存储过程,请放轻松。我试图 SELECT
我的数据来自 Table 1 (EmpTBL
),然后 INSERT
到 Table 2 (EventTBL
)
我认为罪魁祸首是这里的这一行:
@Ename varchar(250) = NULL,
@Edate varchar(250) = NULL,
我认为我的逻辑是正确的我只是不知道为什么它不起作用。
不确定下一步该做什么。
ALTER PROCEDURE spBdayEmp
(@Ename varchar(250) = NUll,
@Edate varchar(250)= NUll,
@Etype varchar(250) = 'Bday')
AS
INSERT INTO EventTBL(EventName, EventDate, EventType)
VALUES (@Ename, @Edate, @Etype)
SELECT
@Ename = (Ename + ' ' + Lname),
@Edate = DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth), dateOfBirth)
FROM
EmpTBL
WHERE
DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DateOfBirth), DateOfBirth) BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30);
我如何获得值? @Ename, @Edate?
我希望 SELECT 查询 "Ename + ' ' + Lname," 的结果等于“@Ename”和“ DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth) , dateOfBirth)," 等于 "@Edate"?
您在将值 select 编辑到变量中之前进行插入。
还有一个考虑因素 - 您的代码将如何处理从 select 返回 2 个或更多结果?
您最好使用类似这样的模式;
Insert into table2 select values from table1
我希望你在 EventTBL 中只有 3 列 table。请更新您的查询如下:
请按以下方式更改您的查询,然后尝试
ALTER PROCEDURE spBdayEmp
AS
INSERT INTO EventTBL(EventName, EventDate, EventType)
SELECT
@Ename = (Ename + ' ' + Lname),
@Edate = DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth), dateOfBirth) ,'Bday'
FROM
EmpTBL
WHERE
DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DateOfBirth), DateOfBirth) BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30);
像这样尝试 -
ALTER PROCEDURE spBdayEmp
(@Etype varchar(250) = 'Bday')
AS
INSERT INTO EventTBL(EventName, EventDate, EventType)
SELECT
Ename + ' ' + Lname,
DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth), dateOfBirth),
@Etype
FROM
EmpTBL
WHERE
DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DateOfBirth), DateOfBirth) BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30);
注意:我看到您已经将 @Etype
参数用于 SP 并为其分配了一些默认值。执行SP时你不能通过@Etype
如果你想使用默认值
阅读后INSERT statement cannot contain a SELECT statement -sql server2012
我意识到我完全错了所以经过一些试验我终于找到了解决方案。
ALTER PROCEDURE spBdayEmp
AS INSERT INTO
EventTBL SELECT (Ename + ' ' + Lname), DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth), dateOfBirth),('Bday')FROM
EmpTBL WHERE DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DateOfBirth), DateOfBirth) BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30);
感谢大家的帮助!
我第一次在这里创建存储过程,请放轻松。我试图 SELECT
我的数据来自 Table 1 (EmpTBL
),然后 INSERT
到 Table 2 (EventTBL
)
我认为罪魁祸首是这里的这一行:
@Ename varchar(250) = NULL,
@Edate varchar(250) = NULL,
我认为我的逻辑是正确的我只是不知道为什么它不起作用。
不确定下一步该做什么。
ALTER PROCEDURE spBdayEmp
(@Ename varchar(250) = NUll,
@Edate varchar(250)= NUll,
@Etype varchar(250) = 'Bday')
AS
INSERT INTO EventTBL(EventName, EventDate, EventType)
VALUES (@Ename, @Edate, @Etype)
SELECT
@Ename = (Ename + ' ' + Lname),
@Edate = DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth), dateOfBirth)
FROM
EmpTBL
WHERE
DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DateOfBirth), DateOfBirth) BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30);
我如何获得值? @Ename, @Edate?
我希望 SELECT 查询 "Ename + ' ' + Lname," 的结果等于“@Ename”和“ DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth) , dateOfBirth)," 等于 "@Edate"?
您在将值 select 编辑到变量中之前进行插入。
还有一个考虑因素 - 您的代码将如何处理从 select 返回 2 个或更多结果?
您最好使用类似这样的模式;
Insert into table2 select values from table1
我希望你在 EventTBL 中只有 3 列 table。请更新您的查询如下:
请按以下方式更改您的查询,然后尝试
ALTER PROCEDURE spBdayEmp
AS
INSERT INTO EventTBL(EventName, EventDate, EventType)
SELECT
@Ename = (Ename + ' ' + Lname),
@Edate = DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth), dateOfBirth) ,'Bday'
FROM
EmpTBL
WHERE
DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DateOfBirth), DateOfBirth) BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30);
像这样尝试 -
ALTER PROCEDURE spBdayEmp
(@Etype varchar(250) = 'Bday')
AS
INSERT INTO EventTBL(EventName, EventDate, EventType)
SELECT
Ename + ' ' + Lname,
DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth), dateOfBirth),
@Etype
FROM
EmpTBL
WHERE
DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DateOfBirth), DateOfBirth) BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30);
注意:我看到您已经将 @Etype
参数用于 SP 并为其分配了一些默认值。执行SP时你不能通过@Etype
如果你想使用默认值
阅读后INSERT statement cannot contain a SELECT statement -sql server2012
我意识到我完全错了所以经过一些试验我终于找到了解决方案。
ALTER PROCEDURE spBdayEmp
AS INSERT INTO
EventTBL SELECT (Ename + ' ' + Lname), DATEADD(YY, DATEPART(YYYY, GETDATE()) - DATEPART(YYYY,dateOfBirth), dateOfBirth),('Bday')FROM
EmpTBL WHERE DATEADD( Year, DATEPART( Year, GETDATE()) - DATEPART( Year, DateOfBirth), DateOfBirth) BETWEEN CONVERT( DATE, GETDATE()) AND CONVERT( DATE, GETDATE() + 30);
感谢大家的帮助!