2016-04-04 7 views
-2

Ich habe einige Probleme/Fragen mit der Verwendung von [, und ' in Tabellennamen.
Zum Beispiel, warumSQL Fehler Tabellenname mit [,] und '

SELECT TOP 1000 [O'test] 
     ,[NumeNOU] 
    FROM [dbname].[dbo].[O'conor] 

dieser Arbeit und diese nicht

use dbname 
GO 
DECLARE @COUNT int 
SELECT @COUNT = Count(*) FROM dbname.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = [dbname].[dbo].[O'conor] 
PRINT @COUNT 

mit dem Fehler

Msg 4104, Ebene 16, Status 1, 4 Line Die mehrteilige Bezeichner "dbname.dbo.O'conor" konnte nicht gebunden werden.

oder diese

use dbname 
    GO 
    DECLARE @COUNT int 
    SELECT @COUNT = Count(*) FROM dbname.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = [O'conor] 
    PRINT @COUNT 

mit dem Fehler

Msg 207, Ebene 16, Status 1, Zeile 4 Ungültiger Spaltenname 'O''conor'.

aber wie diese Arbeit

use dbname 
     GO 
     DECLARE @COUNT int 
     SELECT @COUNT = Count(*) FROM dbname.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'O''conor' 
     PRINT @COUNT 
+0

TABLE_NAME = [Datenbankname]. [DBO]. [O'CONOR] Dies muss von Anführungszeichen umgeben werden, z. '[dbname]. [dbo]. [O'conor]' – Alex

+0

Der mit 'WHERE TABLE_NAME = [O'conor]' ist definitiv falsch, weil Sie versuchen, es als Spaltennamen zu verwenden, Sie würden stattdessen 'tun WHERE TABLE_NAME = 'O''conor'' –

+0

Die Fehlermeldungen sind völlig korrekt, diese Tabellen haben keine Spalte mit diesem Namen. Möglicherweise möchten Sie nach einer Zeile suchen, in der der Tabellenname enthalten ist, aber dann müssen Sie ein Zeichenfolgenliteral verwenden und nicht auf eine Spalte verweisen, die nicht existiert. Also, was ist die Frage? Du sagst "das geht nicht, aber das tut". Ist die Frage "warum?" ? –

Antwort

0

1 + 2

use dbname 
GO 
DECLARE @COUNT int 
SELECT @COUNT = Count(*) FROM dbname.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = [dbname].[dbo].[O'conor] 
PRINT @COUNT 

use dbname 
GO 
DECLARE @COUNT int 
SELECT @COUNT = Count(*) FROM dbname.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = [O'conor] 
PRINT @COUNT 

Thess Abfragen wird nicht funktionieren, da TABLE_NAME einen sysname Wert erwartet, aber sie liefern eine Kennung.

use dbname 
GO 
DECLARE @COUNT int 
SELECT @COUNT = Count(*) FROM dbname.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'O''conor' 
PRINT @COUNT 

Diese Abfrage funktioniert, da Sie einen sysname Wert liefern.

Seitennotiz: Es ist besser, Objektnamen zu verwenden, die nur Buchstaben, Zahlen und Unterstriche enthalten, so dass Sie die eckigen Klammern nicht verwenden müssen.

+0

Vielen Dank für Ihre Antwort – RobertP

+0

[Gerne helfen: -)] (http://meta.stackoverflow.com/questions/291325/how-to-show-appreciation- to-a-user-auf-stackoverflow/291327 # 291327) –