我第一次在这里创建存储过程,请放轻松。我试图从表1(SELECT
)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“?
答案 0 :(得分:0)
在为变量选择值之前,先执行插入操作。
另外考虑一下 - 您的代码将如何处理从您的选择中返回2个或更多结果?
你最好使用像;
这样的模式Insert into table2 select values from table1
答案 1 :(得分:0)
我希望你在EventTBL表中只有3列。请更新您的查询,如下所示:
请更改您的查询,然后尝试
var defferd = $q.defer();
var db = openConn('test1','1.0.0' , 'test1' , 200000);
db.transaction(insertUserInformation, errorDB, successDB);
function insertUserInformation(tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS USERINFO (ID UNIQUE, USERNAME , FULLNAME , PROFILEPIC , ACCESS_TOKEN)');
}
function openConn(databaseName, dbVersion, dbShowName, dbSize){
return window.openDatabase(databaseName, dbVersion, dbShowName, dbSize);
}
function errorDB(tx, err) {
defferd.reject(err);
}
function successDB() {
defferd.resolve(result)
}
return defferd.promise;
答案 2 :(得分: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,并为其分配了一些默认值。执行SP时如果希望使用默认值,则无法传递@Etype
。
答案 3 :(得分:0)
阅读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);
感谢所有帮助过的人!