2016-10-01 8 views
0

私は近くに無効な構文 'sys.objects'

ます。com.microsoft.sqlserver.jdbc.SQLServerExceptionを言うエラーメッセージを取得しています:付近に正しくない構文 'SYS'。

これは、入力したSQLクエリが間違っているか、構文が不足していることがよくあります。そして私は、私が使用しています。このSQLクエリが正しいことを非常に確信しています:

public static Vector<Vector<String>> getKeys() throws SQLException { 
    Vector<Vector<String>> vs = new Vector<Vector<String>>(); 
    Connection con = Dal2.getConnection(); 
    Statement stm = con.createStatement(); 
    ResultSet rSet; 
    String sqlString = "SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint," 
      +"SCHEMA_NAME(schema_id) AS SchemaName," 
      + "OBJECT_NAME(parent_object_id) AS TableName," 
      +"type_desc AS ConstraintType" 
      +"FROM sys.objects" 
      +"WHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT','PRIMARY_KEY_CONSTRAINT')"; 

    try{ 
     rSet = stm.executeQuery(sqlString); 
     while(rSet.next()){ 
      Vector<String> v = new Vector<String>(); 
      for(int i=1; i <= v.size(); i++){ 
       System.out.println(rSet.getString(i) + "\n"); 
     //     v.add(rSet.getString(i)); 
      } 
      } 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
    return vs; 

あなたは私がメソッドを使用していたときにJavaコンソールに結果がセットSQLをプリントアウトしたい見ることができるように。しかし、私は構文エラーを取得し続けます。私は、SQL ServerでSQLクエリを試してみたし、それが正常に動作します:

SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint, 
     SCHEMA_NAME(schema_id) AS SchemaName, 
     OBJECT_NAME(parent_object_id) AS TableName, 
     type_desc AS ConstraintType 
FROM sys.objects 
WHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT','PRIMARY_KEY_CONSTRAINT') 
+3

「FROM」と「WHERE」の前にスペースを挿入してください。 – saka1029

+0

また、 'Vector'を使わないでください。 – chrylis

答えて

0

あなたsqlStringは、クエリのための2つの場所

String sqlString = "SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint," 
     + "SCHEMA_NAME(schema_id) AS SchemaName," 
     + "OBJECT_NAME(parent_object_id) AS TableName," 
     + "type_desc AS ConstraintType " // <-- here 
     + "FROM sys.objects " // <-- here 
     + "WHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT','PRIMARY_KEY_CONSTRAINT')"; 

TLでの空白文字が含まれていません。DR現在クエリは(部分的に)ConstraintTypeFROM sys.objectsWHEREと評価されます。

1

連結文字列は次のようになります。

SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint,SCHEMA_NAME(schema_id) AS SchemaName,OBJECT_NAME(parent_object_id) AS TableName,type_desc AS ConstraintTypeFROM sys.objectsWHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT','PRIMARY_KEY_CONSTRAINT') 

ConstraintTypeFROM sys.objectsWHERE一部。スペースがないため、SQL構文エラーが発生します。

一般に、最後のクエリに連結する各SQL行の最後にスペースを入れることをお勧めします。こうすることで改行時のスペースについて考える必要がなくなります。

String sqlString = "SELECT OBJECT_NAME(OBJECT_ID) AS NameofConstraint, " // <<== Space 
     +"SCHEMA_NAME(schema_id) AS SchemaName, "      // <<== Space 
     + "OBJECT_NAME(parent_object_id) AS TableName, "     // <<== Space 
     +"type_desc AS ConstraintType "         // <<== Space 
     +"FROM sys.objects "            // <<== Space 
     +"WHERE type_desc IN ('FOREIGN_KEY_CONSTRAINT','PRIMARY_KEY_CONSTRAINT')";