Hej Hej, Tjena Hej Du kan göra en dynamisk lagrad procedur på detta sätt.CREATE TABLE med @TabellNamn
Hur ska jag göra om jag vill skapa en ny tabell men vet inte namnet förens vid skapandet.
Jag har ett antal agenter som ska rapportera en större mängd data och varje agent ska skapa
sin egen temporära tabell, tabellnamnet baseras tex på agentid för att garantera unika tabellnamn.
Storage procedures verkar tyvärr inte ta detta (se CREATE TABLE @TableName)
<code>
CREATE PROCEDURE dbo.CreateTable
(
@TableName varchar(20)
)
AS
--
CREATE TABLE @TableName
(
LastName varchar(30),
FirstName varchar,
Address varchar
)
GO
</code>
Vet någon hur jag ska lösa detta?.
En annan process ska tömma tabellens/tabellernas innehåll och slå ihop till en, och sedan ta bort
tabellen. Detta jobb sköts helt av databasen.
Några ideér?
Marcus Sv: CREATE TABLE med @TabellNamn
Det finns kanske någon väg runt på denna sidan :
http://www.sommarskog.se/dynamic_sql.html
Men läs följande stycke först av allt :
http://www.sommarskog.se/dynamic_sql.html#Cre_tblSv: CREATE TABLE med @TabellNamn
Har inte kollat runt på Hultans sidor men work-around låter rimligt.
Kan inte agenterna tilldelas ett unikt id vid varje tillfälle istället?
Tabellen kunde då se ut så här
TempAgentID int
LastName varchar
FirstName varchar
Address varchar
Proceduren som ska slå ihop "tabellerna" behöver då bara gå in i en tabell med ett antal id:n
Ojdå, jag kom sent in i den här tråden ser jag, nåja.
/JohanSv: CREATE TABLE med @TabellNamn
Problemet är att vi har agenter runt om i europa,asien och usa som rapporterar stora mängder
data till en tabell. Nu när vår artitektur växt så har tabelllåsning blivit ett stort problem i den
tabell som används. Det är så stora uppdateringar att en uppdatering kan ta uppemot en halv
minut /agent.
Därför tänkte vi köra en temp tabell, fylla datat och sedan låta SQL servern merasa detta.
Men eftersom detta inte verkar gå så får man alt 1 skapa sig sin egen sql sträng i agent tjänsten
och däregeom ange tabellnamn eller skapa en riktig #temp tabell som bara denna session ser
och fylla tabellen och sedan göra en insert from#tabell till orgtabell.
Vad tror ni om det?
Hälsningar
MarcusSv: CREATE TABLE med @TabellNamn
---------------------------
CREATE PROCEDURE dbo.CreateTable
(
@TableName varchar(256)
)
AS
IF NOT EXISTS( SELECT [name] FROM sysobjects WHERE [Name]=@TableName)
EXEC (' CREATE TABLE ' + @TableName + '(
LastName varchar(30),
FirstName varchar(200),
Address varchar(200))')
GO
---------------------------
IF NOT EXIST är för att inte få ett fel om tabellen redan finns. Kan ju bytas till en IF EXISTS med påföljande EXEC ('DROP TABLE ' + @TableName) om man vill.
En Temporär tabell försvinner i det ögonblick användaren stänger sin session och det kanske inte är önskvärt.
Lycka Till!
/Mattias