How to declare in stored procedure that a row does not exist?
up vote
0
down vote
favorite
I want to know if a certain QuestionID
and EmployeeID
exist; if they do, they need to be inserted like here below (that's working fine).
But if they don't exist, I want a good error for the user, so that he knows that the QuestionID
or the EmployeeID
or both do not exist. Also maybe a rollback of the transaction? Now I can add every number, but the stored procedure still completed the commands...
I have this code (I'm using SQL Server):
CREATE PROCEDURE Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
IF EXISTS (SELECT questionid
FROM question
WHERE questionid = @questionid)
IF EXISTS (SELECT employeeID
FROM employee
WHERE employeeid = @employeeID)
BEGIN
INSERT INTO contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
IF @employeeID = 0
RAISERROR ('-certain error-', 16, 1, @employeeid)
IF @questionid = 0
RAISERROR ('-certain error-', 16, 1, @questionid)
END
sql sql-server
add a comment |
up vote
0
down vote
favorite
I want to know if a certain QuestionID
and EmployeeID
exist; if they do, they need to be inserted like here below (that's working fine).
But if they don't exist, I want a good error for the user, so that he knows that the QuestionID
or the EmployeeID
or both do not exist. Also maybe a rollback of the transaction? Now I can add every number, but the stored procedure still completed the commands...
I have this code (I'm using SQL Server):
CREATE PROCEDURE Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
IF EXISTS (SELECT questionid
FROM question
WHERE questionid = @questionid)
IF EXISTS (SELECT employeeID
FROM employee
WHERE employeeid = @employeeID)
BEGIN
INSERT INTO contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
IF @employeeID = 0
RAISERROR ('-certain error-', 16, 1, @employeeid)
IF @questionid = 0
RAISERROR ('-certain error-', 16, 1, @questionid)
END
sql sql-server
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
I want to know if a certain QuestionID
and EmployeeID
exist; if they do, they need to be inserted like here below (that's working fine).
But if they don't exist, I want a good error for the user, so that he knows that the QuestionID
or the EmployeeID
or both do not exist. Also maybe a rollback of the transaction? Now I can add every number, but the stored procedure still completed the commands...
I have this code (I'm using SQL Server):
CREATE PROCEDURE Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
IF EXISTS (SELECT questionid
FROM question
WHERE questionid = @questionid)
IF EXISTS (SELECT employeeID
FROM employee
WHERE employeeid = @employeeID)
BEGIN
INSERT INTO contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
IF @employeeID = 0
RAISERROR ('-certain error-', 16, 1, @employeeid)
IF @questionid = 0
RAISERROR ('-certain error-', 16, 1, @questionid)
END
sql sql-server
I want to know if a certain QuestionID
and EmployeeID
exist; if they do, they need to be inserted like here below (that's working fine).
But if they don't exist, I want a good error for the user, so that he knows that the QuestionID
or the EmployeeID
or both do not exist. Also maybe a rollback of the transaction? Now I can add every number, but the stored procedure still completed the commands...
I have this code (I'm using SQL Server):
CREATE PROCEDURE Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
IF EXISTS (SELECT questionid
FROM question
WHERE questionid = @questionid)
IF EXISTS (SELECT employeeID
FROM employee
WHERE employeeid = @employeeID)
BEGIN
INSERT INTO contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
IF @employeeID = 0
RAISERROR ('-certain error-', 16, 1, @employeeid)
IF @questionid = 0
RAISERROR ('-certain error-', 16, 1, @questionid)
END
sql sql-server
sql sql-server
edited Nov 11 at 11:09
marc_s
567k12810961247
567k12810961247
asked Nov 11 at 10:16
DutchFatBoys
406
406
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
up vote
0
down vote
accepted
I'd try to do it like this - check for the existence of both parameters in a single statement - if not, then provide an error:
CREATE PROCEDURE dbo.Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
-- check for *both* conditions at once
IF EXISTS (SELECT * FROM dbo.question WHERE questionid = @questionid) AND
EXISTS (SELECT * FROM dbo.employee WHERE employeeid = @employeeID)
BEGIN
-- if OK --> insert
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
BEGIN
-- if NOT OK --> provide error
RAISERROR ('@EmployeeID or @QuestionID do not exist', 16, 1, null)
END
END
Also maybe a rollback of the transaction?
Since you're not really doing anything (no INSERT
happening in either of the two ID's doesn't exist), there's really no transaction to roll back at this point....
add a comment |
up vote
0
down vote
you can use an error message parameter like that :
CREATE PROC dbo.Usp_Contentment
AS
begin
declare @ErrMsg NVARCHAR(MAX) = ''
IF not exists (select 1 from dbo.Question where QuestionId= @QuestionId)
set @ErrMsg = 'Some msg'
if not exists (select 1 from dbo.Employee where Employee Id= @EmployeeId)
set @ErrMsg =@ErrMsg + 'some msg'
IF @msg=''
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
else
RAISERROR(@ErrMsg,16,1)
end
don't use ROLLBACK because you handled the NULL Values
Could you maybe explain what you are doing with 'set @ErrMsg = @ErrMsg'? And with 'if @msg='') Thanks.
– DutchFatBoys
Nov 16 at 10:34
error message parameter's initial value is blank , if the first select was not exits fill parameter's with some message like 'could not find this question' if found question the parameter's value is still blank , then if could not find both of Question and Employee parameter will be somethings like this :'could not find Question' + 'could not find Employee' and after that if parameter is still blank , that means everything is ok and ready for insert
– masoud
Nov 18 at 9:09
Thanks, but if@MSG has to be @ErrMsg isn't it ?
– DutchFatBoys
Nov 20 at 13:21
oh sorry ,you are right
– masoud
Nov 21 at 14:40
add a comment |
up vote
0
down vote
I would let the database do the work. Declare the table to have proper foreign key relationships:
alter table contentment add constraint fk_conententment_question
foreign key (questionid) references question(questionid);
alter table contentment add constraint fk_conententment_employee
foreign key (employeeid) references employee(employeeid);
Then write the procedure as:
CREATE PROCEDURE dbo.usp_Contentment (
@employeeID INT,
@questionid INT
) AS
BEGIN
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END; -- usp_Contentment
The database will generate an error that the foreign key relationship fails -- if there is no matching key.
This approach is much better than doing the test yourself for several reasons:
- The database ensures the data integrity, so you know the relationships are maintained regardless of where the data changes occur.
- The integrity applies to both
insert
s andupdate
s. There is no need to put checks in multiple places. - The integrity check is thread-safe, so if rows are being modified in the reference tables, the integrity check works.
If you really want a customized message, you can catch the error in a try
/catch
block and have a customized error.
add a comment |
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
I'd try to do it like this - check for the existence of both parameters in a single statement - if not, then provide an error:
CREATE PROCEDURE dbo.Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
-- check for *both* conditions at once
IF EXISTS (SELECT * FROM dbo.question WHERE questionid = @questionid) AND
EXISTS (SELECT * FROM dbo.employee WHERE employeeid = @employeeID)
BEGIN
-- if OK --> insert
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
BEGIN
-- if NOT OK --> provide error
RAISERROR ('@EmployeeID or @QuestionID do not exist', 16, 1, null)
END
END
Also maybe a rollback of the transaction?
Since you're not really doing anything (no INSERT
happening in either of the two ID's doesn't exist), there's really no transaction to roll back at this point....
add a comment |
up vote
0
down vote
accepted
I'd try to do it like this - check for the existence of both parameters in a single statement - if not, then provide an error:
CREATE PROCEDURE dbo.Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
-- check for *both* conditions at once
IF EXISTS (SELECT * FROM dbo.question WHERE questionid = @questionid) AND
EXISTS (SELECT * FROM dbo.employee WHERE employeeid = @employeeID)
BEGIN
-- if OK --> insert
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
BEGIN
-- if NOT OK --> provide error
RAISERROR ('@EmployeeID or @QuestionID do not exist', 16, 1, null)
END
END
Also maybe a rollback of the transaction?
Since you're not really doing anything (no INSERT
happening in either of the two ID's doesn't exist), there's really no transaction to roll back at this point....
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
I'd try to do it like this - check for the existence of both parameters in a single statement - if not, then provide an error:
CREATE PROCEDURE dbo.Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
-- check for *both* conditions at once
IF EXISTS (SELECT * FROM dbo.question WHERE questionid = @questionid) AND
EXISTS (SELECT * FROM dbo.employee WHERE employeeid = @employeeID)
BEGIN
-- if OK --> insert
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
BEGIN
-- if NOT OK --> provide error
RAISERROR ('@EmployeeID or @QuestionID do not exist', 16, 1, null)
END
END
Also maybe a rollback of the transaction?
Since you're not really doing anything (no INSERT
happening in either of the two ID's doesn't exist), there's really no transaction to roll back at this point....
I'd try to do it like this - check for the existence of both parameters in a single statement - if not, then provide an error:
CREATE PROCEDURE dbo.Contentment
@employeeID INT,
@questionid INT
AS
BEGIN
-- check for *both* conditions at once
IF EXISTS (SELECT * FROM dbo.question WHERE questionid = @questionid) AND
EXISTS (SELECT * FROM dbo.employee WHERE employeeid = @employeeID)
BEGIN
-- if OK --> insert
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END
ELSE
BEGIN
-- if NOT OK --> provide error
RAISERROR ('@EmployeeID or @QuestionID do not exist', 16, 1, null)
END
END
Also maybe a rollback of the transaction?
Since you're not really doing anything (no INSERT
happening in either of the two ID's doesn't exist), there's really no transaction to roll back at this point....
edited Nov 11 at 11:10
answered Nov 11 at 10:55
marc_s
567k12810961247
567k12810961247
add a comment |
add a comment |
up vote
0
down vote
you can use an error message parameter like that :
CREATE PROC dbo.Usp_Contentment
AS
begin
declare @ErrMsg NVARCHAR(MAX) = ''
IF not exists (select 1 from dbo.Question where QuestionId= @QuestionId)
set @ErrMsg = 'Some msg'
if not exists (select 1 from dbo.Employee where Employee Id= @EmployeeId)
set @ErrMsg =@ErrMsg + 'some msg'
IF @msg=''
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
else
RAISERROR(@ErrMsg,16,1)
end
don't use ROLLBACK because you handled the NULL Values
Could you maybe explain what you are doing with 'set @ErrMsg = @ErrMsg'? And with 'if @msg='') Thanks.
– DutchFatBoys
Nov 16 at 10:34
error message parameter's initial value is blank , if the first select was not exits fill parameter's with some message like 'could not find this question' if found question the parameter's value is still blank , then if could not find both of Question and Employee parameter will be somethings like this :'could not find Question' + 'could not find Employee' and after that if parameter is still blank , that means everything is ok and ready for insert
– masoud
Nov 18 at 9:09
Thanks, but if@MSG has to be @ErrMsg isn't it ?
– DutchFatBoys
Nov 20 at 13:21
oh sorry ,you are right
– masoud
Nov 21 at 14:40
add a comment |
up vote
0
down vote
you can use an error message parameter like that :
CREATE PROC dbo.Usp_Contentment
AS
begin
declare @ErrMsg NVARCHAR(MAX) = ''
IF not exists (select 1 from dbo.Question where QuestionId= @QuestionId)
set @ErrMsg = 'Some msg'
if not exists (select 1 from dbo.Employee where Employee Id= @EmployeeId)
set @ErrMsg =@ErrMsg + 'some msg'
IF @msg=''
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
else
RAISERROR(@ErrMsg,16,1)
end
don't use ROLLBACK because you handled the NULL Values
Could you maybe explain what you are doing with 'set @ErrMsg = @ErrMsg'? And with 'if @msg='') Thanks.
– DutchFatBoys
Nov 16 at 10:34
error message parameter's initial value is blank , if the first select was not exits fill parameter's with some message like 'could not find this question' if found question the parameter's value is still blank , then if could not find both of Question and Employee parameter will be somethings like this :'could not find Question' + 'could not find Employee' and after that if parameter is still blank , that means everything is ok and ready for insert
– masoud
Nov 18 at 9:09
Thanks, but if@MSG has to be @ErrMsg isn't it ?
– DutchFatBoys
Nov 20 at 13:21
oh sorry ,you are right
– masoud
Nov 21 at 14:40
add a comment |
up vote
0
down vote
up vote
0
down vote
you can use an error message parameter like that :
CREATE PROC dbo.Usp_Contentment
AS
begin
declare @ErrMsg NVARCHAR(MAX) = ''
IF not exists (select 1 from dbo.Question where QuestionId= @QuestionId)
set @ErrMsg = 'Some msg'
if not exists (select 1 from dbo.Employee where Employee Id= @EmployeeId)
set @ErrMsg =@ErrMsg + 'some msg'
IF @msg=''
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
else
RAISERROR(@ErrMsg,16,1)
end
don't use ROLLBACK because you handled the NULL Values
you can use an error message parameter like that :
CREATE PROC dbo.Usp_Contentment
AS
begin
declare @ErrMsg NVARCHAR(MAX) = ''
IF not exists (select 1 from dbo.Question where QuestionId= @QuestionId)
set @ErrMsg = 'Some msg'
if not exists (select 1 from dbo.Employee where Employee Id= @EmployeeId)
set @ErrMsg =@ErrMsg + 'some msg'
IF @msg=''
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
else
RAISERROR(@ErrMsg,16,1)
end
don't use ROLLBACK because you handled the NULL Values
answered Nov 11 at 11:54
masoud
11
11
Could you maybe explain what you are doing with 'set @ErrMsg = @ErrMsg'? And with 'if @msg='') Thanks.
– DutchFatBoys
Nov 16 at 10:34
error message parameter's initial value is blank , if the first select was not exits fill parameter's with some message like 'could not find this question' if found question the parameter's value is still blank , then if could not find both of Question and Employee parameter will be somethings like this :'could not find Question' + 'could not find Employee' and after that if parameter is still blank , that means everything is ok and ready for insert
– masoud
Nov 18 at 9:09
Thanks, but if@MSG has to be @ErrMsg isn't it ?
– DutchFatBoys
Nov 20 at 13:21
oh sorry ,you are right
– masoud
Nov 21 at 14:40
add a comment |
Could you maybe explain what you are doing with 'set @ErrMsg = @ErrMsg'? And with 'if @msg='') Thanks.
– DutchFatBoys
Nov 16 at 10:34
error message parameter's initial value is blank , if the first select was not exits fill parameter's with some message like 'could not find this question' if found question the parameter's value is still blank , then if could not find both of Question and Employee parameter will be somethings like this :'could not find Question' + 'could not find Employee' and after that if parameter is still blank , that means everything is ok and ready for insert
– masoud
Nov 18 at 9:09
Thanks, but if@MSG has to be @ErrMsg isn't it ?
– DutchFatBoys
Nov 20 at 13:21
oh sorry ,you are right
– masoud
Nov 21 at 14:40
Could you maybe explain what you are doing with 'set @ErrMsg = @ErrMsg'? And with 'if @msg='') Thanks.
– DutchFatBoys
Nov 16 at 10:34
Could you maybe explain what you are doing with 'set @ErrMsg = @ErrMsg'? And with 'if @msg='') Thanks.
– DutchFatBoys
Nov 16 at 10:34
error message parameter's initial value is blank , if the first select was not exits fill parameter's with some message like 'could not find this question' if found question the parameter's value is still blank , then if could not find both of Question and Employee parameter will be somethings like this :'could not find Question' + 'could not find Employee' and after that if parameter is still blank , that means everything is ok and ready for insert
– masoud
Nov 18 at 9:09
error message parameter's initial value is blank , if the first select was not exits fill parameter's with some message like 'could not find this question' if found question the parameter's value is still blank , then if could not find both of Question and Employee parameter will be somethings like this :'could not find Question' + 'could not find Employee' and after that if parameter is still blank , that means everything is ok and ready for insert
– masoud
Nov 18 at 9:09
Thanks, but if@MSG has to be @ErrMsg isn't it ?
– DutchFatBoys
Nov 20 at 13:21
Thanks, but if@MSG has to be @ErrMsg isn't it ?
– DutchFatBoys
Nov 20 at 13:21
oh sorry ,you are right
– masoud
Nov 21 at 14:40
oh sorry ,you are right
– masoud
Nov 21 at 14:40
add a comment |
up vote
0
down vote
I would let the database do the work. Declare the table to have proper foreign key relationships:
alter table contentment add constraint fk_conententment_question
foreign key (questionid) references question(questionid);
alter table contentment add constraint fk_conententment_employee
foreign key (employeeid) references employee(employeeid);
Then write the procedure as:
CREATE PROCEDURE dbo.usp_Contentment (
@employeeID INT,
@questionid INT
) AS
BEGIN
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END; -- usp_Contentment
The database will generate an error that the foreign key relationship fails -- if there is no matching key.
This approach is much better than doing the test yourself for several reasons:
- The database ensures the data integrity, so you know the relationships are maintained regardless of where the data changes occur.
- The integrity applies to both
insert
s andupdate
s. There is no need to put checks in multiple places. - The integrity check is thread-safe, so if rows are being modified in the reference tables, the integrity check works.
If you really want a customized message, you can catch the error in a try
/catch
block and have a customized error.
add a comment |
up vote
0
down vote
I would let the database do the work. Declare the table to have proper foreign key relationships:
alter table contentment add constraint fk_conententment_question
foreign key (questionid) references question(questionid);
alter table contentment add constraint fk_conententment_employee
foreign key (employeeid) references employee(employeeid);
Then write the procedure as:
CREATE PROCEDURE dbo.usp_Contentment (
@employeeID INT,
@questionid INT
) AS
BEGIN
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END; -- usp_Contentment
The database will generate an error that the foreign key relationship fails -- if there is no matching key.
This approach is much better than doing the test yourself for several reasons:
- The database ensures the data integrity, so you know the relationships are maintained regardless of where the data changes occur.
- The integrity applies to both
insert
s andupdate
s. There is no need to put checks in multiple places. - The integrity check is thread-safe, so if rows are being modified in the reference tables, the integrity check works.
If you really want a customized message, you can catch the error in a try
/catch
block and have a customized error.
add a comment |
up vote
0
down vote
up vote
0
down vote
I would let the database do the work. Declare the table to have proper foreign key relationships:
alter table contentment add constraint fk_conententment_question
foreign key (questionid) references question(questionid);
alter table contentment add constraint fk_conententment_employee
foreign key (employeeid) references employee(employeeid);
Then write the procedure as:
CREATE PROCEDURE dbo.usp_Contentment (
@employeeID INT,
@questionid INT
) AS
BEGIN
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END; -- usp_Contentment
The database will generate an error that the foreign key relationship fails -- if there is no matching key.
This approach is much better than doing the test yourself for several reasons:
- The database ensures the data integrity, so you know the relationships are maintained regardless of where the data changes occur.
- The integrity applies to both
insert
s andupdate
s. There is no need to put checks in multiple places. - The integrity check is thread-safe, so if rows are being modified in the reference tables, the integrity check works.
If you really want a customized message, you can catch the error in a try
/catch
block and have a customized error.
I would let the database do the work. Declare the table to have proper foreign key relationships:
alter table contentment add constraint fk_conententment_question
foreign key (questionid) references question(questionid);
alter table contentment add constraint fk_conententment_employee
foreign key (employeeid) references employee(employeeid);
Then write the procedure as:
CREATE PROCEDURE dbo.usp_Contentment (
@employeeID INT,
@questionid INT
) AS
BEGIN
INSERT INTO dbo.contentment (employeeid, questionid, date, score, comment)
VALUES (@employeeID, @questionid, null, null, null)
END; -- usp_Contentment
The database will generate an error that the foreign key relationship fails -- if there is no matching key.
This approach is much better than doing the test yourself for several reasons:
- The database ensures the data integrity, so you know the relationships are maintained regardless of where the data changes occur.
- The integrity applies to both
insert
s andupdate
s. There is no need to put checks in multiple places. - The integrity check is thread-safe, so if rows are being modified in the reference tables, the integrity check works.
If you really want a customized message, you can catch the error in a try
/catch
block and have a customized error.
answered Nov 11 at 11:55
Gordon Linoff
748k34285391
748k34285391
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53247733%2fhow-to-declare-in-stored-procedure-that-a-row-does-not-exist%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown