[MS-SQL] The name ..... is not a valid identifier

Pagina: 1
Acties:

  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
Alvast sorry voor het vernachelen van de layout

Ik ben een SELECT statement (@Statement VARCHAR(6000)) in elkaar aan het zetten.
Omdat ik in de aanroep een comma seperated string (1,2,3,4,5,6) meegeef die behandeld moet worden als (in dit geval) 6 NUMERIC waarden, bouw ik het statement op in een string die ik later mbv
code:
1
EXEC @Statement
uitvoer.
Helaas, wanneer ik mijn SELECT statement execure, resulteerd dat in de volgende error:
The name 'SELECT * FROM...' is not a valid identifier.
Wanneer ik @Statement PRINT ipv EXEC, komt de volgende query op mijn scherm te staan.
code:
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
SELECT Employee.Id AS EmployeeId, Trans.Date AS Date, Project.Name AS ProjectName, Task.Name AS TaskName, TBL_Project_Settings.IsBillable AS IsBillable, Trans.Total AS Total, 1 AS IsApproved 
FROM Employee 
    INNER JOIN Trans 
        INNER JOIN Project 
            INNER JOIN TBL_Project_Settings 
            ON TBL_Project_Settings.ProjectId = Project.Id 
        ON Project.Id = Trans.Project 
        INNER JOIN Task 
        ON Task.Id = Trans.Task 
    ON Trans.Employee = Employee.Id 
WHERE Employee.Id IN (170, 233) 
AND Trans.Date BETWEEN '1/1/2002' AND '12/31/2002' 
UNION ALL 
SELECT Employee.Id AS EmployeeId, TBL_TempTrans.Date AS Date, Project.Name AS ProjectName, Task.Name AS TaskName, TBL_Project_Settings.IsBillable AS IsBillable, TBL_TempTrans.Total AS Total, 0 AS IsApproved 
FROM Employee 
    INNER JOIN TBL_TempTrans 
        INNER JOIN Project 
            INNER JOIN TBL_Project_Settings 
            ON TBL_Project_Settings.ProjectId = Project.Id 
        ON Project.Id = TBL_TempTrans.Project 
        INNER JOIN Task 
        ON Task.Id = TBL_TempTrans.Task 
    ON TBL_TempTrans.Employee = Employee.Id 
WHERE Employee.Id IN (170, 233) 
AND TBL_TempTrans.Date BETWEEN '1/1/2002' AND '12/31/2002' 
ORDER BY Employee.Id, Date


Wanneer ik deze query run in m'n Query Analyzer, geeft ie gewoon de verwachte resultaten terug.

Ik ben dus gisteren op google, microsoft, webexperts en natuurlijk _/-\o_ GoT _/-\o_ gaan zoeken, maar kreeg niet gevonden waar het aan kon liggen.

Heeft iemand dit zelf ook een keer meegemaakt, of weet iemand hoe ik van die foutmelding af kan komen??

| Life is a game (and games are fun) | homepage |


Verwijderd

En als je alleen die query uitvoert in QA dan werkt ie niet? Wat doet dat SP_dOverview... boven de query?

Verder is het niet bar snel om T-SQL statements IN sqlserver aan elkaar te knutselen. beter is die buiten de database aan elkaar te prakken met parameters in ADO of ADO.NET. Dit omdat je dan wellicht wel een execution plan kunt hergebruiken plus de string concatenation van T-SQL niet dermate rap is. (En SQLServer compileert de verkregen string toch elke keer)

  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
Sorry, dat SP_dOverview_Impact '170, 233', '1/1/2002', '12/31/2002' is de naam van de SP, en is per ongelijk meegekomen met mijn copy actie uit mijn QA.
Bij deze is die ook verwijderd.

De snelheid is in deze ook niet belangrijk voor deze actie, omdat die slechts 1 maal per jaar wordt uitgevoerd.

| Life is a game (and games are fun) | homepage |


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 28-08 19:27

Crazy D

I think we should take a look.

kijk eens naar sp_executesql

Exact expert nodig?


  • akakiwi
  • Registratie: September 2000
  • Laatst online: 20-03 11:13

akakiwi

I believe in the ruling class.

Topicstarter
Nou, dank je wel, want met
code:
1
EXECUTE SP_executeSQL @Statement
waarbij @Statement dan wel van het type NVARCHAR (max 4000) moet zijn, werkt het als een trein.

Sluiten maar die hap :)

| Life is a game (and games are fun) | homepage |