Chaque magasin possède sa propre base de données (ce que je reconnais comme étant une mauvaise pratique), et j'ai besoin d'obtenir des données de toutes ces bases de données qui répondent à certains critères. Je suis venu avec cela, à ce jour, mais je reçois une erreur deLe SQL dynamique est-il le seul moyen de l'exécuter?
Msg 102, niveau 15, état 1, ligne 81
syntaxe incorrecte près «) ».
Je pense que cela montrera ce que je dois réaliser, le SQL dynamique est-il le meilleur moyen d'effectuer cette tâche? Si oui, que puis-je faire pour supprimer mon erreur? Si ce n'est pas le cas, quelles idées/réflexions/réécrit les utilisateurs SQL les plus avancés peuvent-ils fournir?
Create Table #storeinformation
(
storeID int IDENTITY(1,1) PRIMARY KEY
,storename varchar(150)
,storetype varchar(150)
)
Insert INTO #storeinformation Values ('A', 'Corner'), ('B', 'Strip Mall'), ('C', 'Corner'), ('D', 'Corner')
Create Table #storeA
(
storeID varchar(100)
,employeeid int
,tobaccosales decimal(16,4)
,foodsales decimal(16,4)
,lotterysales decimal(16,4)
,gsmapproval varchar(10)
,BDSMapproval varchar(10)
,RSMapproval varchar(10)
)
Insert INTO #storeA VALUES ('A', 16, '14.23', '18.36', '18.22', NULL, NULL, NULL),('A', 43, '110.23', '181.36', '183.22', NULL, NULL, NULL),('A', 55, '124.23', '182.36', '183.22', 'Yes', 'Yes', 'Yes')
Create Table #storeB
(
storeID varchar(100)
,employeeid int
,tobaccosales decimal(16,4)
,foodsales decimal(16,4)
,lotterysales decimal(16,4)
,gsmapproval varchar(10)
,BDSMapproval varchar(10)
,RSMapproval varchar(10)
)
Insert INTO #storeB VALUES ('B', 11, '14.23', '18.36', '18.22', 'Yes', NULL, NULL),('B', 13, '110.23', '181.36', '183.22', NULL, NULL, NULL),('B', 52, '124.23', '182.36', '183.22', NULL, 'Yes', NULL)
Create Table #storeC
(
storeID varchar(100)
,employeeid int
,tobaccosales decimal(16,4)
,foodsales decimal(16,4)
,lotterysales decimal(16,4)
,gsmapproval varchar(10)
,BDSMapproval varchar(10)
,RSMapproval varchar(10)
)
Insert INTO #storeC VALUES ('C', 6, '14.23', '18.36', '18.22', NULL, NULL, 'Yes'),('C', 4, '110.23', '181.36', '183.22', NULL, NULL, NULL),('C', 5, '124.23', '182.36', '183.22', NULL, 'Yes', NULL)
Create Table #storeD
(
storeID varchar(100)
,employeeid int
,tobaccosales decimal(16,4)
,foodsales decimal(16,4)
,lotterysales decimal(16,4)
,gsmapproval varchar(10)
,BDSMapproval varchar(10)
,RSMapproval varchar(10)
)
Insert INTO #storeD VALUES ('D', '116', '14.23', '18.36', '18.22', 'Yes', 'Yes', 'Yes'),('D', '143', '10.23', '81.36', '18.22', 'Yes', NULL, 'Yes'),('D', '155', '12.23', '1.36', '183.22', 'Yes', NULL, NULL)
Create Table #FullOnFrontalData
(
storename varchar(100)
,tobaccosales decimal(16,4)
,foodsales decimal(16,4)
,lotterysales decimal(16,4)
,evaluated varchar(10)
)
Insert Into #FullOnFrontalData (storename)
Select storename
FROM #storeinformation
Where storetype = 'Corner'
Declare @storecount int, @dbname varchar(100)
Set @storecount = (Select Count(*) from #FullOnFrontalData)
while @storecount > 0
BEGIN
Set @dbname = (Select Top 1 storename from #FullOnFrontalData where evaluated is null)
EXEC('Update #FullOnFrontalData
Set tobaccosales = (Select SUM(tobaccosales) FROM '[email protected]))
EXEC('Update #FullOnFrontalData
foodsales = (Select SUM(foodsales) FROM '[email protected]))
EXEC('Update #FullOnFrontalData
lotterysales = (Select SUM(lotterysales) FROM '[email protected]))
update #FullOnFrontalData
set evaluated = 1
where storename = @dbname
set @storecount = @storecount - 1
END
Select * from #FullOnFrontalData
Vous avez en sus) à la fin. Il devrait être '+ @dbname + ')')' Faites aussi votre @dbname nvarchar. – artm
@artm - bonne prise. Recommanderiez-vous que ce soit un cas d'utiliser inline sqql? –