Avatar billede bondester Nybegynder
24. oktober 2010 - 17:28 Der er 6 kommentarer og
1 løsning

Variabler i tabelnavne

Hej

Jeg har tidligere med stor succes brugt variabler i .sql filer...

Jeg har brugt det sæledes:


SET @username='TEST';
SET @userpass='TEST';
SET @tag='TEST';

INSERT INTO test_users (username, userpass, tag) VALUES(@username, @userpass, @tag);


Jeg bruger dataerne i flere forskellige tabeller, derfor variablerne.

Er der mulighed for at bruge det i tabel-navnene?? Jeg tænker noget som:

SET @tbl_pre='test';

INSERT INTO @tbl_pre +'_users' (username, userpass, tag)

Men kan bare ikke få syntax'en til at fungere... Nogen der kan hjælpe, evt. med helt anden løsning hvor jeg på forhånd kan definerer prefix direkte i .sql filen!
Avatar billede arne_v Ekspert
24. oktober 2010 - 20:40 #1
Det kan man ikke umiddelbart.

Variable er for værdier ikke navne.

Som workaround kan du konkatanere dine variable ind i en færdig streng med SQL og så PREPARE og EXECUTE den.
Avatar billede bondester Nybegynder
29. oktober 2010 - 22:24 #2
Hej arne...

Den skal jeg vist lige have uddybet, evt via link?? Konkatanere??

// Bondester
Avatar billede arne_v Ekspert
30. oktober 2010 - 02:17 #3
Eksempel:

mysql> set @v1 = 't';
Query OK, 0 rows affected (0.00 sec)

mysql> set @v2 = '1';
Query OK, 0 rows affected (0.00 sec)

mysql> set @sql = concat('select * from ', @v1, @v2);
Query OK, 0 rows affected (0.00 sec)

mysql> prepare ps from @sql;
Query OK, 0 rows affected (0.05 sec)
Statement prepared

mysql> execute ps;
+-----+--------+
| F1  | F2    |
+-----+--------+
|  1 | A      |
|  2 | BB    |
|  3 | CCC    |
|  4 | DDDD  |
|  5 | EEEEE  |
| 123 | X      |
|  6 | FFFFFF |
|  77 | XX    |
+-----+--------+
8 rows in set (0.01 sec)
Avatar billede bondester Nybegynder
30. oktober 2010 - 22:08 #4
Men jeg kan jo ikke få den til at danne et tabel navn som er:

set @var = 'test'
CREATE TABLE @var '_users'

Altså tabellen jeg vil have fat i er test_users, men kunne også være site_users, tds_users, gkw_users osv. osv.

Kan ikke rigtig ud fra dit eksempel hitte ud af en løsning...
Avatar billede arne_v Ekspert
30. oktober 2010 - 22:36 #5
set @var = 'test';
set @sql = concat('create table ', @var, '_users')
Avatar billede bondester Nybegynder
30. oktober 2010 - 22:42 #6
Ahhhh selvfølgelig smid svar så er der points på vej til milionen ;-)
Avatar billede arne_v Ekspert
30. oktober 2010 - 22:46 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB