Frage : Gespeichertes Verfahren schlingt usw.

Hallo alle,

Im versuchend, ein gespeichertes Verfahren zu verursachen, das durch eine Tabelle sich schlingt und Datum- und Zeitschnüre d.h. 20100801 175900 in einen Datum/Uhrzeit-Gegenstand umwandelt. Dieser Datum/Uhrzeit-Gegenstand möchte dann in eine andere Spalte eingesetzt werden. Ich habe einem SP todo dieses geschrieben, aber ich halte, die Störung zu erhalten, „die Skalarvariable erklären „muss, das @FirstID“.“ Ich verstehe nicht, warum als es scheint, kein Problem geben, das das varible erklärt. Wenn jedermann helfen könnte oder mir helfen zu ordnen, würde dieses herauf es grateful.
sein
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:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
ALTER VERFAHREN [dbo]. [wsp_Update_DateTime] (@Table Putzfrau (50), @TableID Putzfrau (50), @DateField Putzfrau (50), @TimeField Putzfrau (50), @DateTimeField Putzfrau (50))
	-- Die Parameter für das gespeicherte Verfahren hier hinzufügen
	
WIE
ANFANGEN
	-- NOCOUNT EINSTELLEN AN addiert, um Extraresultatssätze an zu verhindern
	-- Störung AUSERWÄHLTE Aussagen.
	NOCOUNT AN EINSTELLEN;

	@FirstID int ERKLÄREN
	@Date Putzfrau (20) ERKLÄREN
	@Time Putzfrau (20) ERKLÄREN
	@DT Putzfrau (40) ERKLÄREN
	@DateTime Datum/Uhrzeit ERKLÄREN

	@cmd ALS NVARCHAR ERKLÄREN (maximal)

	@cmd = N'SELECT @FirstID = Minute („+ @TableID + ") VON 'EINSTELLEN + @Table
	EXEC sp_executesql @cmd 

	WÄHREND @FIRSTID NICHT UNGÜLTIG IST
	ANFANGEN

		@cmd2 als NVARCHAR ERKLÄREN (maximal);

		EINSTELLEN @CMD2 = N'SELECT @DATE = „+ @DATEFIELD +“, @TIME = „+ @TIMEFIELD +“ VON „+ @TABLE +“ WO „+ @TABLEID +“ = '+ @TABLE;

		EXEC sp_executesql @cmd2;

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

		@DateTime = Bekehrten (Datum/Uhrzeit, @DT, 20) EINSTELLEN;

		@cmd3 als NVARCHAR ERKLÄREN (maximal);

		EINSTELLEN @CMD3 = N'UPDATE „+ @TABLE +“ EINSTELLEN „+ @DATETIMEFIELD +“ = @DATETIME WO „+ @TABLEID +“ = @FIRSTID';

		EXEC sp_executesql @cmd3; 
	
		@cmd4 ALS NVARCHAR ERKLÄREN (maximal)

		EINSTELLEN @cmd4 = N'SELECT @FirstID = Minute („+ @TableID + ") VON „+ @Table +“ WO „+ @TableID +“ > @FirstID';
		
		EXEC sp_executesql @cmd4 

	ENDE

Antwort : Gespeichertes Verfahren schlingt usw.

Ich würde durch nicht using dynamischen SQL wo möglich beginnen.  So mit anderen Worten, anstatt, in die Tabelle und in die Spalte zu überschreiten, ein gespeichertes Verfahren für jede Tabelle haben.  Als Ihre UPDATE-Aussage kann auf verringert werden:

YourTableName AKTUALISIEREN
YourDateTimeColumn = BEKEHRTEN (Datum/Uhrzeit, MATERIAL (MATERIAL (MATERIAL (MATERIAL (YourDateCharColumn, 5, 0, „-“), 8, 0, „-“), 14, 0 EINSTELLEN, „: "), 17, 0, „: "), 120)
WO YourTableID = @FirstID
Weitere Lösungen  
 
programming4us programming4us