0

我第一次在这里创建存储过程,请放轻松。我试图SELECT从表 1 ( EmpTBL) 中获取我的数据,然后INSERT将其放入表 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”?

4

4 回答 4

0

在将值选择到变量中之前进行插入。

另一个考虑因素 - 您的代码将如何处理从您的选择中返回 2 个或更多结果?

您可能会更好地使用类似的模式;

Insert into table2 select values from table1
于 2015-10-29T08:57:43.140 回答
0

我希望您在 EventTBL 表中只有 3 列。请更新您的查询如下:

请如下更改您的查询,然后尝试

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);
于 2015-10-29T09:10:22.557 回答
0

试试这样 -

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 的参数并为其分配了一些默认值。@Etype执行 SP 时,如果要使用默认值,则无法通过。

于 2015-10-29T09:10:40.317 回答
0

读取INSERT 语句后不能包含 SELECT 语句 -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);

感谢所有试图提供帮助的人!

于 2015-11-02T03:41:56.947 回答