Vraag : De opgeslagen Lijnen enz. van de Procedure

Hallo heeft iedereen,

Im een opgeslagen procedure proberen tot stand te brengen die de lijnen door een lijst en de bekeerlingen dateren en de tijdkoorden die d.w.z. 20100801 175900 aan een datumtijd bezwaar. Dit voorwerp van de datumtijd wil dan in een andere kolom worden opgenomen. Ik heb geschreven een todo van SP dit maar ik houd krijgend de fout „moet scalaire veranderlijke „@FirstID“ verklaren.“ Ik begrijp niet waarom als er geen probleem schijnt te zijn verklarend varible. Als iedereen, me helpen of kon helpen dit opruimen zou het grateful.
zijn
" codeBody "
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
van
ALTER PROCEDURE [dbo]. [wsp_Update_DateTime] (@Table klusje (50), @TableID klusje (50), @DateField klusje (50), @TimeField klusje (50), @DateTimeField klusje (50))
	-- Voeg de parameters hier voor de opgeslagen procedure toe
	
ZOALS
BEGIN
	-- PLAATS NOCOUNT OP toegevoegd om te verhinderen extra resultaatreeksen
	-- het mengen zich in UITGEZOCHTE verklaringen.
	VASTGESTELDE NOCOUNT;

	VERKLAAR @FirstID int.
	VERKLAAR klusje @Date (20)
	VERKLAAR klusje @Time (20)
	VERKLAAR klusje @DT (40)
	VERKLAAR @DateTime datetime

	VERKLAAR @CMD ALS (MAXIMUM) NVARCHAR

	PLAATS @cmd = N'SELECT @FirstID = Min („+ @TableID +“) VAN '+ @Table
	EXEC sp_executesql @cmd 

	TERWIJL @FIRSTID NIET ONGELDIG IS
	BEGIN

		VERKLAAR @cmd2 als (maximum) NVARCHAR;

		PLAATS @CMD2 = N'SELECT @DATE = „+ @DATEFIELD +“, @TIME = „+ @TIMEFIELD +“ VAN „+ @TABLE +“ WAAR „+ @TABLEID +“ = '+ @TABLE;

		EXEC sp_executesql @cmd2;

		VASTGESTELD @DT = substring (@Date, 1.4) + „-“ + substring (@Date, 5.2) + „-“ + substring (@Date, 7.2) + „„+ substring (@Time, 1.2) +“: “ + substring (@Time, 3.2) + „: “ + substring (@Time, 5.2);

		REEKS @DateTime = bekeerling (datetime, @DT, 20);

		VERKLAAR @cmd3 als (maximum) NVARCHAR;

		PLAATS @CMD3 = N'UPDATE „+ @TABLE +“ PLAATSEN „+ @DATETIMEFIELD +“ = @DATETIME WAAR „+ @TABLEID +“ = @FIRSTID';

		EXEC sp_executesql @cmd3; 
	
		VERKLAAR @CMD4 ALS (MAXIMUM) NVARCHAR

		PLAATS @cmd4 = N'SELECT @FirstID = Min („+ @TableID +“) VAN „+ @Table +“ WAAR „+ @TableID +“ > @FirstID';
		
		EXEC sp_executesql @cmd4 

	EIND

Antwoord : De opgeslagen Lijnen enz. van de Procedure

Ik zou door Dynamische SQL niet te gebruiken waar mogelijk beginnen.  Met andere woorden in plaats van het overgaan in de lijst en de kolom hebben zo een Opgeslagen Procedure voor elke lijst.  Dan uw UPDATE kan de verklaring worden verminderd:

YourTableName BIJ TE WERKEN
YourDateTimeColumn PLAATSEN = BEKEERLING (datetime, MATERIAAL (MATERIAAL (MATERIAAL (MATERIAAL (YourDateCharColumn, 5, 0, „-“), 8, 0, „-“), 14, 0, „: “), 17, 0, „: “), 120)
WAAR YourTableID = @FirstID
Andere oplossingen  
 
programming4us programming4us