Help | Site Map
Connecting Tech Pros Worldwide
 
 
LinkBack Thread Tools
  #1  
Old August 12th, 2008, 10:25 PM
pbd22
Guest
 
Posts: n/a
Default Trying to insert a zero, its telling me i cannot insert a null


Hi.

I am trying to insert a zero into the below table and I am being told
that:

Cannot insert the value NULL into column 'UsageToday', table
DB.dbo.Pub_Count'; column does not allow nulls. UPDATE fails. The
statement has been terminated.

What I am trying to insert is a string that I convert into an int
before the insert. It complains
when I try to insert the converted zero.

The table is here:

CREATE TABLE [dbo].[Pub_Count](
[CPID] [int] NOT NULL,
[UsageToday] [int] NOT NULL CONSTRAINT [DF__Pub_C__Usage__19DFD96B]
DEFAULT ((0)),
CONSTRAINT [PK_Pub_Count] PRIMARY KEY CLUSTERED
(
[CPID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY
= OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Thanks in advance.
  #2  
Old August 12th, 2008, 10:35 PM
Plamen Ratchev
Guest
 
Posts: n/a
Default Re: Trying to insert a zero, its telling me i cannot insert a null

What is the SQL statement that you use to insert? Try this:

INSERT INTO Pub_Count VALUES(1, '0');

INSERT INTO Pub_Count VALUES(2, CAST('0' AS INT));

You can use COALESCE to make sure the value is not NULL.


Plamen Ratchev
http://www.SQLStudio.com
  #3  
Old August 12th, 2008, 10:45 PM
Erland Sommarskog
Guest
 
Posts: n/a
Default Re: Trying to insert a zero, its telling me i cannot insert a null

pbd22 (dushkin@gmail.com) writes:
Quote:
I am trying to insert a zero into the below table and I am being told
that:
>
Cannot insert the value NULL into column 'UsageToday', table
DB.dbo.Pub_Count'; column does not allow nulls. UPDATE fails. The
statement has been terminated.
>
What I am trying to insert is a string that I convert into an int
before the insert. It complains
when I try to insert the converted zero.
Juding from the error message, you are trying to insert a NULL.

Since you don't show us any code or data, there is no way we can tell
what you are doing wrong.





--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Links for SQL Server Books Online:
SQL 2008: http://msdn.microsoft.com/en-us/sqlserver/cc514207.aspx
SQL 2005: http://msdn.microsoft.com/en-us/sqlserver/bb895970.aspx
SQL 2000: http://www.microsoft.com/sql/prodinf...ons/books.mspx

  #4  
Old August 12th, 2008, 10:45 PM
pbd22
Guest
 
Posts: n/a
Default Re: Trying to insert a zero, its telling me i cannot insert a null

Hi,

Thanks for the fast reply.

It is a stored procedure i am calling from the code-behind.
I have looked (again and again) at the values I am passing
and I never see a null value... the point it complains on I see
that I am trying to pass a zero.

Here is the bit of code where I construct the command:


List<List<string>pubs =
null;

SqlCommand command =
conn.CreateCommand();
command.CommandText =
"vb_Update";
command.CommandType =
CommandType.StoredProcedure;

//declare 4 different (or
whatever number you need) params
SqlParameter pub_id = new
SqlParameter("@pub_id", SqlDbType.Int);
SqlParameter pub_bw = new
SqlParameter("@total_yesterday_hours", SqlDbType.Int);
SqlParameter pub_date = new
SqlParameter("@param_date", SqlDbType.SmallDateTime);

//add them to command

command.Parameters.Add(pub_id);

command.Parameters.Add(pub_bw);

command.Parameters.Add(pub_date);

pubs = new
Profile().Publisher();

for (int j = 0; j <
pubs.Count; j++)
{
int p = 0;

for (int k = 0; k <
pubs[j].Count; k++)
{

if (k != 2)
{

command.Parameters[p].Value = Convert.ToInt32(pubs[j][k]);

p++;
}
else
{


command.Parameters[p].Value = pubs[j][k];
}

}

  #5  
Old August 12th, 2008, 11:05 PM
pbd22
Guest
 
Posts: n/a
Default Re: Trying to insert a zero, its telling me i cannot insert a null

here is the procedure:


ALTER PROCEDURE [dbo].[vb_Update]
(
@pub_id INT,
@total_yesterday_hours INT,
@param_date SMALLDATETIME
)
AS
BEGIN

-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

IF NOT EXISTS
(SELECT CountDate
FROM Pub_ViewCount
WHERE CPID = @pub_id
AND CountDate = @param_date )
BEGIN
INSERT INTO Pub_ViewCount (
CPID, CountDate, ViewCount,
EmbedCount, DirectCount,
UsageToday ) VALUES (
@pub_id, @param_date, 0,0,0,0)
END

-- get total for yesterday, add to UsageTodayBW
UPDATE Pub_ViewCount
SET Pub_ViewCount.DailyPSHours= @total_yesterday_hours
WHERE Pub_ViewCount.CountDate = @param_date
AND Pub_ViewCount.CPID = @pub_id;

UPDATE Pub_ViewCount
SET Pub_ViewCount.UsageToday = (@total_yesterday_hours - (SELECT
Pub_ViewCount.DailyPSHours
FROM Pub_ViewCount
WHERE Pub_ViewCount.CountDate = CONVERT(VARCHAR(50), DATEADD(day, -1,
@param_date), 101)
AND Pub_ViewCount.CPID = @pub_id))
WHERE Pub_ViewCount.CountDate = @param_date
AND Pub_ViewCount.CPID = @pub_id;

UPDATE Pub_Usage
SET TotalUsed = (SELECT SUM(p.UsageToday)
FROM Pub_ViewCount AS p
WHERE p.CPID = @pub_id)
WHERE PUPID = @pub_id;

END
  #6  
Old August 12th, 2008, 11:15 PM
pbd22
Guest
 
Posts: n/a
Default Re: Trying to insert a zero, its telling me i cannot insert a null

I think the problem statement is here:

UPDATE Pub_ViewCount
SET Pub_ViewCount.UsageToday = (@total_yesterday_hours - (SELECT
Pub_ViewCount.DailyPSHours
FROM Pub_ViewCount
WHERE Pub_ViewCount.CountDate = CONVERT(VARCHAR(50), DATEADD(day, -1,
@param_date), 101)
AND Pub_ViewCount.CPID = @pub_id))
WHERE Pub_ViewCount.CountDate = @param_date
AND Pub_ViewCount.CPID = @pub_id;


Particularly:

(@total_yesterday_hours - (SELECT
Pub_ViewCount.DailyPSHours
FROM Pub_ViewCount
WHERE Pub_ViewCount.CountDate = CONVERT(VARCHAR(50), DATEADD(day, -1,
@param_date), 101)
AND Pub_ViewCount.CPID = @pub_id))


I have tried ISNULL around @total_yesterday_count but that didn't
work.

any ideas?
  #7  
Old August 12th, 2008, 11:35 PM
Plamen Ratchev
Guest
 
Posts: n/a
Default Re: Trying to insert a zero, its telling me i cannot insert a null

The problem is with the following update:

UPDATE Pub_ViewCount
SET Pub_ViewCount.UsageToday = (@total_yesterday_hours - (SELECT
Pub_ViewCount.DailyPSHours
FROM Pub_ViewCount
WHERE Pub_ViewCount.CountDate = CONVERT(VARCHAR(50), DATEADD(day, -1,
@param_date), 101)
AND Pub_ViewCount.CPID = @pub_id))
WHERE Pub_ViewCount.CountDate = @param_date
AND Pub_ViewCount.CPID = @pub_id;


If the subquery does not return any rows then you are updating to
(@total_yesterday_hours - NULL) which evaluates to NULL. Add COALESCE:

UPDATE Pub_ViewCount
SET Pub_ViewCount.UsageToday = @total_yesterday_hours - COALESCE(<subquery>,
0)
....


Plamen Ratchev
http://www.SQLStudio.com

 

Bookmarks

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

What is Bytes?

We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights. Get the best answers to your questions from over network members.
Post your question now . . .
It's fast and it's free

Popular Articles