---
title: "Alltid \"where\" vid update?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/57291-alltid-where-vid-update"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Moppan"
published: "2002-10-28T13:05:37.000Z"
updated: "2002-10-28T14:00:26.000Z"
replies: 10
views: 342
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/57291-alltid-where-vid-update"
---

# Alltid "where" vid update?

## #1 — Moppan, 2002-10-28T13:05Z

Hallå!

Måste man ha en where-sats på en update? Jag har gjort en temporär tabell som bara kommer att innehålla en rad. Tabellen har 12 kolumner, en för varje månad (Month1 till Month12). För varje månad gör jag en uträkning och vill sedan lägga in den summeringen (@Hours) i tabellen för den aktuella månaden.
(Se nedan). Jag har ingen nyckel på tabellen, hur gör jag? 

SET @Month = 1
  
WHILE @Month \< 13 
BEGIN

BLA BLA BLA

END

SET @ExecString = ''	
SET @ExecString = 'UPDATE #StatisticTable SET Month' + CAST(@Month AS varchar) + ' = ' + CAST(ISNULL(@Hours, 0) AS varchar)
	
EXECUTE (@ExecString)

SET @Month = @Month + 1
 
END

Permalänk: https://www.webforum.nu/p/57291

## #2 — @nders, 2002-10-28T13:09Z

> Måste man ha en where-sats på en update?

Nej. Ska du uppdatera alla poster i en tabell behöver du ingen where-sats. Är det något problem med den kod du har?

Permalänk: https://www.webforum.nu/p/836490

## #3 — Moppan, 2002-10-28T13:10Z

Något fel är det iaf.. :)

Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '1'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '2'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '3'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '4'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '5'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '6'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '7'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '8'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '9'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '10'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '11'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '12'.

Permalänk: https://www.webforum.nu/p/836492

## #4 — Moppan, 2002-10-28T13:12Z

Nej men jag får inte ut några sifrror när hämtar allt i den temporära tabellen.... Nada....

Permalänk: https://www.webforum.nu/p/836494

## #5 — Moppan, 2002-10-28T13:16Z

Förstår inte varför....

Permalänk: https://www.webforum.nu/p/836496

## #6 — LarsG, 2002-10-28T13:16Z

Visa den riktiga koden då och inte något BLA HA

Permalänk: https://www.webforum.nu/p/836497

## #7 — Moppan, 2002-10-28T13:18Z

CREATE PROCEDURE spTime_GetDeb
(
 @Year int, 
 @PersonID int = 0
)
AS
SET NOCOUNT ON

DECLARE @Month Int
DECLARE @Hours Int
DECLARE @ExecString varchar(2000)

CREATE TABLE #StatisticTable
(	
	Month1 Int,
	Month2 Int,
	Month3 Int,
	Month4 Int,
	Month5 Int,
	Month6 Int,
	Month7 Int,
	Month8 Int,
	Month9 Int,
	Month10 Int,
	Month11 Int,
	Month12 Int,
	\--\[Sum\] Int,
	\--\[Percent\] Int
)

  SET @Month = 1
  
  WHILE @Month \< 13 
  BEGIN
      IF @PersonID = 0
        BEGIN
	SELECT @Hours = Sum(WorkedTime) 
	FROM TimePerDayAndProject TP  
	INNER JOIN Project P ON TP.ProjectID = P.ProjectID 
	INNER JOIN ProjectTypes PT ON P.ProjectTypesID = PT.ProjectTypesID 
	WHERE PT.Subtract \<\> 1 and datepart(yyyy,TP.DateField) = @Year AND datepart (mm,TP.DateField) = @Month
        END
      ELSE
        BEGIN
	SELECT @Hours = Sum(WorkedTime) 
	FROM TimePerDayAndProject TP  
	INNER JOIN Project P ON TP.ProjectID = P.ProjectID 
	INNER JOIN ProjectTypes PT ON P.ProjectTypesID = PT.ProjectTypesID 
	WHERE PT.Subtract \<\> 1 and datepart(yyyy,TP.DateField) = @Year AND datepart (mm,TP.DateField) = @Month and TP.PersonID = @PersonID
        END

	SET @ExecString = ''	
	SET @ExecString = 'UPDATE #StatisticTable SET Month' + CAST(@Month AS varchar) + ' = ' + CAST(ISNULL(@Hours, 0) AS varchar)
	
	EXECUTE (@ExecString)

	SET @Month = @Month + 1
   END
   

  

SELECT \*  FROM #StatisticTable

SET NOCOUNT OFF
GO

Permalänk: https://www.webforum.nu/p/836499

## #8 — Moppan, 2002-10-28T13:27Z

Help me.. :)

Permalänk: https://www.webforum.nu/p/836506

## #9 — Moppan, 2002-10-28T13:51Z

Nu blev det tyst....

Permalänk: https://www.webforum.nu/p/836519

## #10 — LarsG, 2002-10-28T13:53Z

Varför behöver du en temptabell överhuvudtaget?

Du kan väl göra en select med group by month() så att du får 12 poster till applikationen. Om du sedan vill visa dom på en rad så är ju inte det något problem. 

Tillbaka till problemet.

Nu gör du aldrig insert i temptabellen och då finns det inget att uppdatera.

Jag har sett att det kan vara problem med funktioner och dylikt i samband med strängkonkatenering.

```
CREATE PROCEDURE spTime_GetDeb 
( 
@Year int, 
@PersonID int = 0 
) 
AS 
SET NOCOUNT ON 

DECLARE @Month Int 
DECLARE @Hours varchar(10) 
declare @monthName varchar(10)

DECLARE @ExecString varchar(2000) 

CREATE TABLE #StatisticTable 
( 
Month1 Int, 
Month2 Int, 
Month3 Int, 
Month4 Int, 
Month5 Int, 
Month6 Int, 
Month7 Int, 
Month8 Int, 
Month9 Int, 
Month10 Int, 
Month11 Int, 
Month12 Int, 
--[Sum] Int, 
--[Percent] Int 
) 
insert into #StatisticTable default values
SET @Month = 1 

WHILE @Month < 13 
BEGIN 
IF @PersonID = 0 
BEGIN 
SELECT @Hours = cast(Sum(WorkedTime) as varchar(10))
FROM TimePerDayAndProject TP 
INNER JOIN Project P ON TP.ProjectID = P.ProjectID 
INNER JOIN ProjectTypes PT ON P.ProjectTypesID = PT.ProjectTypesID 
WHERE PT.Subtract <> 1 and datepart(yyyy,TP.DateField) = @Year AND datepart (mm,TP.DateField) = @Month 
END 
ELSE 
BEGIN 
SELECT @Hours = cast(Sum(WorkedTime) as varchar(10))
FROM TimePerDayAndProject TP 
INNER JOIN Project P ON TP.ProjectID = P.ProjectID 
INNER JOIN ProjectTypes PT ON P.ProjectTypesID = PT.ProjectTypesID 
WHERE PT.Subtract <> 1 and datepart(yyyy,TP.DateField) = @Year AND datepart (mm,TP.DateField) = @Month and TP.PersonID = @PersonID 
END 
set @hours = coalesce(@hours,'0')
set @monthname = 'Month' + cast(@month as varchar(2))

SET @ExecString = 'UPDATE #StatisticTable SET Month' + @monthName + ' = ' + @Hours 

EXECUTE (@ExecString) 

SET @Month = @Month + 1 
END 

SELECT * FROM #StatisticTable 
SET NOCOUNT OFF
```

Permalänk: https://www.webforum.nu/p/836522

## #11 — Moppan, 2002-10-28T14:00Z

Tack Lars!!!

Det enda jag lade till var: insert into #StatisticTable default values, resten lämnade jag som tidgare. Fungerar fina fisken.

Måste ha ut resultatet på en rad, i applikationen används ett speciellt programmeringsspråk...... Inget som jag har kommit på som du säkert förstår..  :) Jag är IQ fiskmås på det här stället.

Permalänk: https://www.webforum.nu/p/836527

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/57291-alltid-where-vid-update
