Salim_sam
asked on
INSERT NULL IN SMALLDATETIME DATATYPE
Hi,
I have a stored procedure that insert a record into a table. I am passing Call_Log_Date as text. When is blank, I like to get updated with null. If a date, then updated with date. Call_Log_Date is a SmallDateTime field. I know the problem but not sure how to solve. I think the single qoute around the @vCall_Log_Date. It works fine when I pass date, but When I pass blank, it put default value '01/01/1900' which I don't wont.
CREATE PROCEDURE up_uwc_QuitLine_M_AddNewRe cords_1
@Client_ID nvarchar(5),
@Call_ID nvarchar(4),
@Followup_ID nvarchar(4),
@Call_Log_Count nvarchar(4),
@Call_Log_Date nvarchar(20),
@Call_Log_Time nvarchar(50),
@Call_Log_Complete nvarchar(3),
@Call_Log_Message_Left nvarchar(3)
as
DECLARE @stsql varchar(1000)
DECLARE @vPrint varchar(1000)
DECLARE @vGroupNum nvarchar(10)
DECLARE @vCall_Log_Date nvarchar(20)
--set @stsql = ''
if @Call_Log_Date = ''
begin
set @vCall_Log_Date = null
end
else
begin
set @vCall_Log_Date = @Call_Log_Date
--set @vCall_Log_Date = convert(DATETIME, @Call_Log_Date )
end
exec ('INSERT INTO QuitLine_Call_Log (Client_ID, Call_ID, Followup_ID,
Call_Log_Count, Call_Log_Date, Call_Log_Time, Call_Log_Complete, Call_Log_Message_Left)
VALUES( '
+ @Client_ID
+', ' + @Call_ID
+', ' + @Followup_ID
+', ' + @Call_Log_Count
+', ''' + @vCall_Log_Date
+''', ''' + @Call_Log_Time
+''', ''' + @Call_Log_Complete
+''', ''' + @Call_Log_Message_Left
+ ''')' )
I have a stored procedure that insert a record into a table. I am passing Call_Log_Date as text. When is blank, I like to get updated with null. If a date, then updated with date. Call_Log_Date is a SmallDateTime field. I know the problem but not sure how to solve. I think the single qoute around the @vCall_Log_Date. It works fine when I pass date, but When I pass blank, it put default value '01/01/1900' which I don't wont.
CREATE PROCEDURE up_uwc_QuitLine_M_AddNewRe
@Client_ID nvarchar(5),
@Call_ID nvarchar(4),
@Followup_ID nvarchar(4),
@Call_Log_Count nvarchar(4),
@Call_Log_Date nvarchar(20),
@Call_Log_Time nvarchar(50),
@Call_Log_Complete nvarchar(3),
@Call_Log_Message_Left nvarchar(3)
as
DECLARE @stsql varchar(1000)
DECLARE @vPrint varchar(1000)
DECLARE @vGroupNum nvarchar(10)
DECLARE @vCall_Log_Date nvarchar(20)
--set @stsql = ''
if @Call_Log_Date = ''
begin
set @vCall_Log_Date = null
end
else
begin
set @vCall_Log_Date = @Call_Log_Date
--set @vCall_Log_Date = convert(DATETIME, @Call_Log_Date )
end
exec ('INSERT INTO QuitLine_Call_Log (Client_ID, Call_ID, Followup_ID,
Call_Log_Count, Call_Log_Date, Call_Log_Time, Call_Log_Complete, Call_Log_Message_Left)
VALUES( '
+ @Client_ID
+', ' + @Call_ID
+', ' + @Followup_ID
+', ' + @Call_Log_Count
+', ''' + @vCall_Log_Date
+''', ''' + @Call_Log_Time
+''', ''' + @Call_Log_Complete
+''', ''' + @Call_Log_Message_Left
+ ''')' )
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
In general, the EXEC will not perform as well (SQL cannot pre-parse the query, it has to wait until run time to even check the syntax of the query). Also, EXEC plans are not saved in cache. If this runs multiple times, SQL will have to check the syntax and convert it into executable instructions separately every time it runs.
Finally, EXEC requires that the specific user running the query has insert permission directly on their id, not from a role. If you use roles to manage security, it can be a pain to have to also keep separate individual permissions because of EXEC.
Finally, EXEC requires that the specific user running the query has insert permission directly on their id, not from a role. If you use roles to manage security, it can be a pain to have to also keep separate individual permissions because of EXEC.
ASKER
Sorry for extending,
I guess for this query I have to use exec(...)
It is not working as is now. Then of course I will get a date (NULL) error problem when I change it. Any help for this one. I appreciated a lot. Thank you. Last one on this points.
Problem: Declare variable error
@vCallOrFollowup
@vCallOrFollowupField
DECLARE @vCallOrFollowup varchar(30)
DECLARE @vCallOrFollowupField varchar(30)
DECLARE @vCallOrFollowupValue varchar(30)
IF @Followup_ID = 0
BEGIN
SET @vCallOrFollowup = 'QuitLine_Call'
SET @vCallOrFollowupValue = @Call_ID
SET @vCallOrFollowupField = 'Call_ID'
END
ELSE
BEGIN
SET @vCallOrFollowup = 'QuitLine_Followup'
SET @vCallOrFollowupValue = @Followup_ID
SET @vCallOrFollowupField = 'Followup_ID'
END
INSERT INTO @vCallOrFollowup (Client_ID, @vCallOrFollowupField, Counselor_First,
Counselor_Last, Counselor_Ext, Call_StartTime,
Call_EndTime, Num_Days_Smoking, Smoking_Per_Day, Started_Smoking_Age, Tried_Quit_Smoking,
Longest_Abstinence_Smoking , Client_Best_Describes,
Education, Marital_Status, Family_People_Live_InHome,
Family_Under18_Live_InHome , What_Age1, What_Age2,
What_Age3, What_Age4, Smoking_Allowed_InHome,
Currently_Pregnant, Pregnant_estimated_due_dat e, Pregnant_Smoking_Quitdate,
Next_Call_Date, Next_Call_Time, Follow_Up_1, Follow_Up_2, Follow_Up_3,
Ok_Contact_Again, On_Leave_Message, Case_Notes,
Call2_Smoked_Past_7_Days,
Call2_Smoked_Even_Puff_Sin ce_Lasttim e,
Call2_Elapsed_Between_Days , Receiving_Additional_Servi ces)
VALUES(@Client_ID, @vCallOrFollowupValue, @Counselor_First, @Counselor_Last, @Counselor_Ext, @Call_StartTime,
@Call_EndTime, @Num_Days_Smoking, @Smoking_Per_Day, @Started_Smoking_Age, @Tried_Quit_Smoking,
@Longest_Abstinence_Smokin g, @Client_Best_Describes, @Education, @Marital_Status, @Family_People_Live_InHome ,
@Family_Under18_Live_InHom e, @What_Age1, @What_Age2, @What_Age3, @What_Age4, @Smoking_Allowed_InHome,
@Currently_Pregnant, @Pregnant_estimated_due_da te, @Pregnant_Smoking_Quitdate , @Next_Call_Date, @Next_Call_Time,
@Follow_Up_1, @Follow_Up_2, @Follow_Up_3, @Ok_Contact_Again, @On_Leave_Message, @Case_Notes,
@Call2_Smoked_Past_7_Days, @Call2_Smoked_Even_Puff_Si nce_Lastti me, @Call2_Elapsed_Between_Day s, @Receiving_Additional_Serv ices)
I guess for this query I have to use exec(...)
It is not working as is now. Then of course I will get a date (NULL) error problem when I change it. Any help for this one. I appreciated a lot. Thank you. Last one on this points.
Problem: Declare variable error
@vCallOrFollowup
@vCallOrFollowupField
DECLARE @vCallOrFollowup varchar(30)
DECLARE @vCallOrFollowupField varchar(30)
DECLARE @vCallOrFollowupValue varchar(30)
IF @Followup_ID = 0
BEGIN
SET @vCallOrFollowup = 'QuitLine_Call'
SET @vCallOrFollowupValue = @Call_ID
SET @vCallOrFollowupField = 'Call_ID'
END
ELSE
BEGIN
SET @vCallOrFollowup = 'QuitLine_Followup'
SET @vCallOrFollowupValue = @Followup_ID
SET @vCallOrFollowupField = 'Followup_ID'
END
INSERT INTO @vCallOrFollowup (Client_ID, @vCallOrFollowupField, Counselor_First,
Counselor_Last, Counselor_Ext, Call_StartTime,
Call_EndTime, Num_Days_Smoking, Smoking_Per_Day, Started_Smoking_Age, Tried_Quit_Smoking,
Longest_Abstinence_Smoking
Education, Marital_Status, Family_People_Live_InHome,
Family_Under18_Live_InHome
What_Age3, What_Age4, Smoking_Allowed_InHome,
Currently_Pregnant, Pregnant_estimated_due_dat
Next_Call_Date, Next_Call_Time, Follow_Up_1, Follow_Up_2, Follow_Up_3,
Ok_Contact_Again, On_Leave_Message, Case_Notes,
Call2_Smoked_Past_7_Days,
Call2_Smoked_Even_Puff_Sin
Call2_Elapsed_Between_Days
VALUES(@Client_ID, @vCallOrFollowupValue, @Counselor_First, @Counselor_Last, @Counselor_Ext, @Call_StartTime,
@Call_EndTime, @Num_Days_Smoking, @Smoking_Per_Day, @Started_Smoking_Age, @Tried_Quit_Smoking,
@Longest_Abstinence_Smokin
@Family_Under18_Live_InHom
@Currently_Pregnant, @Pregnant_estimated_due_da
@Follow_Up_1, @Follow_Up_2, @Follow_Up_3, @Ok_Contact_Again, @On_Leave_Message, @Case_Notes,
@Call2_Smoked_Past_7_Days,
You can still avoid an EXEC using something similar to:
IF @Followup_ID = 0
BEGIN
SET @vCallValue = @Call_ID
SET @vFollowupValue = ''
END --IF
ELSE
BEGIN
SET @vCallValue = ''
SET @vFollowupValue = @Followup_ID
END --ELSE
INSERT INTO @vCallOrFollowup (Client_ID, Call_ID, Followup_ID, Counselor_First,
...
VALUES (@Client_ID, @vCallValue, @vFollowupValue, @Counselor_First,
...
IF @Followup_ID = 0
BEGIN
SET @vCallValue = @Call_ID
SET @vFollowupValue = ''
END --IF
ELSE
BEGIN
SET @vCallValue = ''
SET @vFollowupValue = @Followup_ID
END --ELSE
INSERT INTO @vCallOrFollowup (Client_ID, Call_ID, Followup_ID, Counselor_First,
...
VALUES (@Client_ID, @vCallValue, @vFollowupValue, @Counselor_First,
...
ASKER
Hi,
@vCallOrFollowup - it does not line it
it can have Quitline_call or QuitLine_Followup - Table name
If Quitline_call - Only Call_id - No followup_id
If QuitLine_Followup - Only Followup_If - No Call_id
Below line is the way I have, but it keeps giving me error.
INSERT INTO @vCallOrFollowup (Client_ID, @vCallOrFollowupField, Counselor_First,
My Procedure:
CREATE PROCEDURE up_uwc_QuitLine_M_AddNewRe cords
@Client_ID nvarchar(5),
@Call_ID nvarchar(4),
@Followup_ID nvarchar(4),
@Counselor_First nvarchar(50),
@Counselor_Last nvarchar(50),
@Counselor_Ext nvarchar(50),
@Call_StartTime nvarchar(20),
@Call_EndTime nvarchar(20),
@Num_Days_Smoking nvarchar(50),
@Smoking_Per_Day nvarchar(50),
@Started_Smoking_Age nvarchar(50),
@Tried_Quit_Smoking nvarchar(50),
@Longest_Abstinence_Smokin g nvarchar(50),
@Client_Best_Describes nvarchar(200),
@Education nvarchar(200),
@Marital_Status nvarchar(50),
@Family_People_Live_InHome nvarchar(5),
@Family_Under18_Live_InHom e nvarchar(5),
@What_Age1 nvarchar(5),
@What_Age2 nvarchar(5),
@What_Age3 nvarchar(5),
@What_Age4 nvarchar(5),
@Smoking_Allowed_InHome nvarchar(5),
@Currently_Pregnant nvarchar(3),
@Pregnant_estimated_due_da te nvarchar(20),
@Pregnant_Smoking_Quitdate nvarchar(20),
@Next_Call_Date nvarchar(20),
@Next_Call_Time nvarchar(20),
@Follow_Up_1 nvarchar(50),
@Follow_Up_2 nvarchar(50),
@Follow_Up_3 nvarchar(50),
@Ok_Contact_Again nvarchar(50),
@On_Leave_Message nvarchar(50),
@Case_Notes nvarchar(500),
@Call2_Smoked_Past_7_Days nvarchar(3),
@Call2_Smoked_Even_Puff_Si nce_Lastti me nvarchar(3),
@Call2_Elapsed_Between_Day s nvarchar(4),
@Receiving_Additional_Serv ices nvarchar(3)
as
/*
*/
DECLARE @stsql varchar(2000)
DECLARE @vPrint varchar(1000)
DECLARE @vGroupNum nvarchar(10)
DECLARE @vCallOrFollowup varchar(30)
DECLARE @vCallOrFollowupField varchar(30)
DECLARE @vCallOrFollowupValue varchar(30)
IF REPLACE(@Pregnant_estimate d_due_date ,' ','') = ''
begin
set @Pregnant_estimated_due_da te = null
end
IF REPLACE(@Pregnant_Smoking_ Quitdate,' ','') = ''
begin
set @Pregnant_Smoking_Quitdate = null
end
IF REPLACE(@Next_Call_Date,' ','') = ''
begin
set @Next_Call_Date = null
end
IF REPLACE(@Follow_Up_1,' ','') = ''
begin
set @Follow_Up_1 = null
end
IF REPLACE(@Follow_Up_2,' ','') = ''
begin
set @Follow_Up_2 = null
end
IF REPLACE(@Follow_Up_3,' ','') = ''
begin
set @Follow_Up_3 = null
end
IF @Followup_ID = 0
BEGIN
INSERT INTO QuitLine_Call (Client_ID, CALL_ID, Counselor_First,
Counselor_Last, Counselor_Ext, Call_StartTime,
Call_EndTime, Num_Days_Smoking, Smoking_Per_Day, Started_Smoking_Age, Tried_Quit_Smoking,
Longest_Abstinence_Smoking , Client_Best_Describes,
Education, Marital_Status, Family_People_Live_InHome,
Family_Under18_Live_InHome , What_Age1, What_Age2,
What_Age3, What_Age4, Smoking_Allowed_InHome,
Currently_Pregnant, Pregnant_estimated_due_dat e, Pregnant_Smoking_Quitdate,
Next_Call_Date, Next_Call_Time, Follow_Up_1, Follow_Up_2, Follow_Up_3,
Ok_Contact_Again, On_Leave_Message, Case_Notes,
Call2_Smoked_Past_7_Days,
Call2_Smoked_Even_Puff_Sin ce_Lasttim e,
Call2_Elapsed_Between_Days , Receiving_Additional_Servi ces)
VALUES(@Client_ID, @Call_ID, @Counselor_First, @Counselor_Last, @Counselor_Ext, @Call_StartTime,
@Call_EndTime, @Num_Days_Smoking, @Smoking_Per_Day, @Started_Smoking_Age, @Tried_Quit_Smoking,
@Longest_Abstinence_Smokin g, @Client_Best_Describes, @Education, @Marital_Status, @Family_People_Live_InHome ,
@Family_Under18_Live_InHom e, @What_Age1, @What_Age2, @What_Age3, @What_Age4, @Smoking_Allowed_InHome,
@Currently_Pregnant, @Pregnant_estimated_due_da te, @Pregnant_Smoking_Quitdate , @Next_Call_Date, @Next_Call_Time,
@Follow_Up_1, @Follow_Up_2, @Follow_Up_3, @Ok_Contact_Again, @On_Leave_Message, @Case_Notes,
@Call2_Smoked_Past_7_Days, @Call2_Smoked_Even_Puff_Si nce_Lastti me, @Call2_Elapsed_Between_Day s, @Receiving_Additional_Serv ices)
END
ELSE
BEGIN
INSERT INTO QuitLine_Followup (Client_ID, Followup_ID, Counselor_First,
Counselor_Last, Counselor_Ext, Call_StartTime,
Call_EndTime, Num_Days_Smoking, Smoking_Per_Day, Started_Smoking_Age, Tried_Quit_Smoking,
Longest_Abstinence_Smoking , Client_Best_Describes,
Education, Marital_Status, Family_People_Live_InHome,
Family_Under18_Live_InHome , What_Age1, What_Age2,
What_Age3, What_Age4, Smoking_Allowed_InHome,
Currently_Pregnant, Pregnant_estimated_due_dat e, Pregnant_Smoking_Quitdate,
Next_Call_Date, Next_Call_Time, Follow_Up_1, Follow_Up_2, Follow_Up_3,
Ok_Contact_Again, On_Leave_Message, Case_Notes,
Call2_Smoked_Past_7_Days,
Call2_Smoked_Even_Puff_Sin ce_Lasttim e,
Call2_Elapsed_Between_Days , Receiving_Additional_Servi ces)
VALUES(@Client_ID, @Followup_ID, @Counselor_First, @Counselor_Last, @Counselor_Ext, @Call_StartTime,
@Call_EndTime, @Num_Days_Smoking, @Smoking_Per_Day, @Started_Smoking_Age, @Tried_Quit_Smoking,
@Longest_Abstinence_Smokin g, @Client_Best_Describes, @Education, @Marital_Status, @Family_People_Live_InHome ,
@Family_Under18_Live_InHom e, @What_Age1, @What_Age2, @What_Age3, @What_Age4, @Smoking_Allowed_InHome,
@Currently_Pregnant, @Pregnant_estimated_due_da te, @Pregnant_Smoking_Quitdate , @Next_Call_Date, @Next_Call_Time,
@Follow_Up_1, @Follow_Up_2, @Follow_Up_3, @Ok_Contact_Again, @On_Leave_Message, @Case_Notes,
@Call2_Smoked_Past_7_Days, @Call2_Smoked_Even_Puff_Si nce_Lastti me, @Call2_Elapsed_Between_Day s, @Receiving_Additional_Serv ices)
END
@vCallOrFollowup - it does not line it
it can have Quitline_call or QuitLine_Followup - Table name
If Quitline_call - Only Call_id - No followup_id
If QuitLine_Followup - Only Followup_If - No Call_id
Below line is the way I have, but it keeps giving me error.
INSERT INTO @vCallOrFollowup (Client_ID, @vCallOrFollowupField, Counselor_First,
My Procedure:
CREATE PROCEDURE up_uwc_QuitLine_M_AddNewRe
@Client_ID nvarchar(5),
@Call_ID nvarchar(4),
@Followup_ID nvarchar(4),
@Counselor_First nvarchar(50),
@Counselor_Last nvarchar(50),
@Counselor_Ext nvarchar(50),
@Call_StartTime nvarchar(20),
@Call_EndTime nvarchar(20),
@Num_Days_Smoking nvarchar(50),
@Smoking_Per_Day nvarchar(50),
@Started_Smoking_Age nvarchar(50),
@Tried_Quit_Smoking nvarchar(50),
@Longest_Abstinence_Smokin
@Client_Best_Describes nvarchar(200),
@Education nvarchar(200),
@Marital_Status nvarchar(50),
@Family_People_Live_InHome
@Family_Under18_Live_InHom
@What_Age1 nvarchar(5),
@What_Age2 nvarchar(5),
@What_Age3 nvarchar(5),
@What_Age4 nvarchar(5),
@Smoking_Allowed_InHome nvarchar(5),
@Currently_Pregnant nvarchar(3),
@Pregnant_estimated_due_da
@Pregnant_Smoking_Quitdate
@Next_Call_Date nvarchar(20),
@Next_Call_Time nvarchar(20),
@Follow_Up_1 nvarchar(50),
@Follow_Up_2 nvarchar(50),
@Follow_Up_3 nvarchar(50),
@Ok_Contact_Again nvarchar(50),
@On_Leave_Message nvarchar(50),
@Case_Notes nvarchar(500),
@Call2_Smoked_Past_7_Days nvarchar(3),
@Call2_Smoked_Even_Puff_Si
@Call2_Elapsed_Between_Day
@Receiving_Additional_Serv
as
/*
*/
DECLARE @stsql varchar(2000)
DECLARE @vPrint varchar(1000)
DECLARE @vGroupNum nvarchar(10)
DECLARE @vCallOrFollowup varchar(30)
DECLARE @vCallOrFollowupField varchar(30)
DECLARE @vCallOrFollowupValue varchar(30)
IF REPLACE(@Pregnant_estimate
begin
set @Pregnant_estimated_due_da
end
IF REPLACE(@Pregnant_Smoking_
begin
set @Pregnant_Smoking_Quitdate
end
IF REPLACE(@Next_Call_Date,' ','') = ''
begin
set @Next_Call_Date = null
end
IF REPLACE(@Follow_Up_1,' ','') = ''
begin
set @Follow_Up_1 = null
end
IF REPLACE(@Follow_Up_2,' ','') = ''
begin
set @Follow_Up_2 = null
end
IF REPLACE(@Follow_Up_3,' ','') = ''
begin
set @Follow_Up_3 = null
end
IF @Followup_ID = 0
BEGIN
INSERT INTO QuitLine_Call (Client_ID, CALL_ID, Counselor_First,
Counselor_Last, Counselor_Ext, Call_StartTime,
Call_EndTime, Num_Days_Smoking, Smoking_Per_Day, Started_Smoking_Age, Tried_Quit_Smoking,
Longest_Abstinence_Smoking
Education, Marital_Status, Family_People_Live_InHome,
Family_Under18_Live_InHome
What_Age3, What_Age4, Smoking_Allowed_InHome,
Currently_Pregnant, Pregnant_estimated_due_dat
Next_Call_Date, Next_Call_Time, Follow_Up_1, Follow_Up_2, Follow_Up_3,
Ok_Contact_Again, On_Leave_Message, Case_Notes,
Call2_Smoked_Past_7_Days,
Call2_Smoked_Even_Puff_Sin
Call2_Elapsed_Between_Days
VALUES(@Client_ID, @Call_ID, @Counselor_First, @Counselor_Last, @Counselor_Ext, @Call_StartTime,
@Call_EndTime, @Num_Days_Smoking, @Smoking_Per_Day, @Started_Smoking_Age, @Tried_Quit_Smoking,
@Longest_Abstinence_Smokin
@Family_Under18_Live_InHom
@Currently_Pregnant, @Pregnant_estimated_due_da
@Follow_Up_1, @Follow_Up_2, @Follow_Up_3, @Ok_Contact_Again, @On_Leave_Message, @Case_Notes,
@Call2_Smoked_Past_7_Days,
END
ELSE
BEGIN
INSERT INTO QuitLine_Followup (Client_ID, Followup_ID, Counselor_First,
Counselor_Last, Counselor_Ext, Call_StartTime,
Call_EndTime, Num_Days_Smoking, Smoking_Per_Day, Started_Smoking_Age, Tried_Quit_Smoking,
Longest_Abstinence_Smoking
Education, Marital_Status, Family_People_Live_InHome,
Family_Under18_Live_InHome
What_Age3, What_Age4, Smoking_Allowed_InHome,
Currently_Pregnant, Pregnant_estimated_due_dat
Next_Call_Date, Next_Call_Time, Follow_Up_1, Follow_Up_2, Follow_Up_3,
Ok_Contact_Again, On_Leave_Message, Case_Notes,
Call2_Smoked_Past_7_Days,
Call2_Smoked_Even_Puff_Sin
Call2_Elapsed_Between_Days
VALUES(@Client_ID, @Followup_ID, @Counselor_First, @Counselor_Last, @Counselor_Ext, @Call_StartTime,
@Call_EndTime, @Num_Days_Smoking, @Smoking_Per_Day, @Started_Smoking_Age, @Tried_Quit_Smoking,
@Longest_Abstinence_Smokin
@Family_Under18_Live_InHom
@Currently_Pregnant, @Pregnant_estimated_due_da
@Follow_Up_1, @Follow_Up_2, @Follow_Up_3, @Ok_Contact_Again, @On_Leave_Message, @Case_Notes,
@Call2_Smoked_Past_7_Days,
END
The IF/ELSE with INSERTs for each should work fine. And IMHO that's a far better option than EXEC. If you're getting an error trying this, please post what the error is.
The main thing overall is that, as you've discovered, the table cannot be a variable and no column name can be a variable.
The main thing overall is that, as you've discovered, the table cannot be a variable and no column name can be a variable.
ASKER
Thank you very much,
It is working.
Can you explain If there any downfall to the exec query
Is it a good practice? Or where would you use something like it?
exec('select...')
Thank you