none
Problema con Comando SQL Ayuda RRS feed

  • Pregunta

  •  

    if not Exists (select * from sysdatabases where Name='Cole')
    begin
    create database Cole
    use Cole
    create table Descuentos(CodigoP varchar(6),Fecha datetime,Minutos int)
    create table Profesores(CodigoP varchar(6),Nombres varchar(15),ApellidosP varchar(15),ApellidosM varchar(15),Edad varchar(2))
    create table Horario(CodHora char,CodigoP varchar(6),NomDia varchar(7),Aula varchar(2),Status int)
    create table Hora(CodHora char,HoraIni varchar(8), HoraFin varchar(8))
    create table Adm(Clave varchar(30))
    insert into Adm values ('123456')
    end
    

     


    Ese Es El Comando sql q uso y me aparece este error:

     

    No se encuentra en sysdatabases la entrada de la base de datos 'Cole'. Asegúrese de que ha
     escrito el nombre correctamente.

     

    Yo me pude Dar cuenta de que el error sale xq pongo "use Cole", pero xq me dice q no existe si lo estoy creando..., pongo "use Cole"; por que necesito crear las tablas en es BD. Si alguien mas pudiera probar el codigo y ver si funciona o no.

    Espero q me puedan Ayudar, Gracias.


    • Cambiado Enrique M. Montejo martes, 26 de julio de 2011 14:04 SQL Server (De:Lenguaje VB.NET)
    martes, 26 de julio de 2011 6:27

Respuestas

  • Tienes varios errores:

    • La vista "sysdatabases" pertenece al esquema "sys"
    • Después de crear la base de datos tienes que abrir otro batch (es decir, meter un "GO" entre medias")

    En definitiva, prueba algo como esto:

    IF NOT EXISTS (SELECT * FROM sys.sysdatabases WHERE Name='Cole')
    	CREATE DATABASE Cole
    GO	
    USE Cole
    
    CREATE TABLE Descuentos(CodigoP VARCHAR(6),Fecha DATETIME,Minutos INT)
    CREATE TABLE Profesores(CodigoP VARCHAR(6),Nombres VARCHAR(15),ApellidosP VARCHAR(15),ApellidosM VARCHAR(15),Edad VARCHAR(2))
    CREATE TABLE Horario(CodHora CHAR,CodigoP VARCHAR(6),NomDia VARCHAR(7),Aula VARCHAR(2),Status INT)
    CREATE TABLE Hora(CodHora CHAR,HoraIni VARCHAR(8), HoraFin VARCHAR(8))
    CREATE TABLE Adm(Clave VARCHAR(30))
    INSERT INTO Adm VALUES ('123456')
    
    


    martes, 26 de julio de 2011 14:35
  • Hola, con este código en SQL Management Studio vas a poder hacer lo que quieres:

    if db_id('cole') is not null

    drop database cole

         

     create database Cole

     

           go

           use Cole

           go

           create table Descuentos(CodigoP varchar(6),Fecha datetime,Minutos int)

           create table Profesores(CodigoP varchar(6),Nombres varchar(15),ApellidosP varchar(15),ApellidosM varchar(15),Edad varchar(2))

           create table Horario(CodHora char,CodigoP varchar(6),NomDia varchar(7),Aula varchar(2),Status int)

           create table Hora(CodHora char,HoraIni varchar(8), HoraFin varchar(8))

           create table Adm(Clave varchar(30))

           insert into Adm values ('123456')

     


    MVP MCT MCTS Daniel Calbimonte

    http://elpaladintecnologico.blogspot.com
    martes, 26 de julio de 2011 14:39

Todas las respuestas

  • Pero esa consulta T-SQL, ¿desde dónde la estás ejecutando? ¿Desde Microsoft SQL Server Management Studio o desde una aplicación de Visual Basic .NET?

    Si es desde SQL Server Management Studio, mejor será que efectúes tu consulta en el foro en español de Microsoft SQL Server:

    http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/threads

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    martes, 26 de julio de 2011 7:17
  • hola

    por lo que entendi estas ejecutando estas lineas desde el Sql Server Management Studio, no ?

    si es asi cuando tienes la ventana del query, veras un combo en la parte superior para seleccionar la db contra la cual db realizas la ejecucion ? apunto a esta opcion imagen


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    martes, 26 de julio de 2011 11:58
  • Tienes varios errores:

    • La vista "sysdatabases" pertenece al esquema "sys"
    • Después de crear la base de datos tienes que abrir otro batch (es decir, meter un "GO" entre medias")

    En definitiva, prueba algo como esto:

    IF NOT EXISTS (SELECT * FROM sys.sysdatabases WHERE Name='Cole')
    	CREATE DATABASE Cole
    GO	
    USE Cole
    
    CREATE TABLE Descuentos(CodigoP VARCHAR(6),Fecha DATETIME,Minutos INT)
    CREATE TABLE Profesores(CodigoP VARCHAR(6),Nombres VARCHAR(15),ApellidosP VARCHAR(15),ApellidosM VARCHAR(15),Edad VARCHAR(2))
    CREATE TABLE Horario(CodHora CHAR,CodigoP VARCHAR(6),NomDia VARCHAR(7),Aula VARCHAR(2),Status INT)
    CREATE TABLE Hora(CodHora CHAR,HoraIni VARCHAR(8), HoraFin VARCHAR(8))
    CREATE TABLE Adm(Clave VARCHAR(30))
    INSERT INTO Adm VALUES ('123456')
    
    


    martes, 26 de julio de 2011 14:35
  • Hola, con este código en SQL Management Studio vas a poder hacer lo que quieres:

    if db_id('cole') is not null

    drop database cole

         

     create database Cole

     

           go

           use Cole

           go

           create table Descuentos(CodigoP varchar(6),Fecha datetime,Minutos int)

           create table Profesores(CodigoP varchar(6),Nombres varchar(15),ApellidosP varchar(15),ApellidosM varchar(15),Edad varchar(2))

           create table Horario(CodHora char,CodigoP varchar(6),NomDia varchar(7),Aula varchar(2),Status int)

           create table Hora(CodHora char,HoraIni varchar(8), HoraFin varchar(8))

           create table Adm(Clave varchar(30))

           insert into Adm values ('123456')

     


    MVP MCT MCTS Daniel Calbimonte

    http://elpaladintecnologico.blogspot.com
    martes, 26 de julio de 2011 14:39
  • (select * from sysdatabases where Name='Cole')
    debería ser (select * from sys.sysdatabases where Name='Cole')
    martes, 26 de julio de 2011 16:49
  • Hola a todos y grcis por responder.

    Bueno el codigo q puse ovbiamente lo puse en el SQL, pero en si lo tengo q ejecutar desde vb. Dije lo pruebo en SQL y luego lo paso con tal es = pero creo q me equivoque, me sale el mismo error es mas uno adicional...

    use el codigo de Carlos Sacristan en el SQL y PERFECTO, pero cuando lo uso en vb.net ahi esta el problema

    Este esl codigo q uso en vb.net

    Dim cnn As New SqlConnection("Data Source=.\SQLEXPRESS; Initial Catalog=master; Integrated Security=True")
        Dim cmd As New SqlCommand("IF NOT EXISTS (SELECT * FROM sys.sysdatabases WHERE Name='Cole')" & vbCrLf & _
    "CREATE DATABASE Cole" & vbCrLf & _
    "GO" & vbCrLf & _
    "USE Cole" & vbCrLf & _
    "CREATE TABLE Descuentos(CodigoP VARCHAR(6),Fecha DATETIME,Minutos INT)" & vbCrLf & _
    "CREATE TABLE Profesores(CodigoP VARCHAR(6),Nombres VARCHAR(15),ApellidosP VARCHAR(15),ApellidosM VARCHAR(15),Edad VARCHAR(2))" & vbCrLf & _
    "CREATE TABLE Horario(CodHora CHAR,CodigoP VARCHAR(6),NomDia VARCHAR(7),Aula VARCHAR(2),Status INT)" & vbCrLf & _
    "CREATE TABLE Hora(CodHora CHAR,HoraIni VARCHAR(8), HoraFin VARCHAR(8))" & vbCrLf & _
    "CREATE TABLE Adm(Clave VARCHAR(30))" & vbCrLf & _
    "INSERT INTO Adm VALUES ('123456')", cnn)
        cnn.Open()
        cmd.ExecuteNonQuery()
        cnn.Close()
        cnn = New SqlConnection("Data Source=.\SQLEXPRESS; Initial Catalog=Cole; Integrated Security=True")
    

    y este error m,edevuelve
    Sintaxis incorrecta cerca de 'GO'. No se encuentra en sysdatabases la entrada de la base de datos 'Cole'. Asegúrese de que ha escrito el nombre correctamente.

    Ayuda

     

     

     

     

    jueves, 28 de julio de 2011 6:19
  • Es que "GO" no es algo de TSQL, sino una especie de palabra comodín que reconocen sólo ciertas herramientas (como SSMS o sqlcmd) para separar batches.

    Lo que deberías hacer entonces es ejecutar las instrucciones que en el script aparecen separadas por "GO" de forma independiente: primero tendrías que crear la base de datos y luego, en otro objeto sqlcommand, ejecutar el resto.

    jueves, 28 de julio de 2011 6:41
  • Cuando el código es muy amplio, es mejor llamarlo dentro de un procedimiento almacenado.

    Así no tienes que sufrir concatenando si no que llamas directamente al procedimiento. 

    O si no, podrías llamar al script con código.


    MVP MCT MCTS Daniel Calbimonte

    http://elpaladintecnologico.blogspot.com
    jueves, 28 de julio de 2011 22:01
  • Dani, el problema en este caso no es que sean muchas líneas de código, sino que tienen que enviarse como diferentes batches, pero al intentar hacerlo desde una herramienta que no es SSMS o SQLCMD, el "GO" lanza error.
    viernes, 29 de julio de 2011 7:04
  • Otra alternativa sería algo así.
    Dim cnn As New SqlConnection("Data Source=.\SQLEXPRESS; Initial Catalog=master; Integrated Security=True")
      Dim cmd As New SqlCommand("IF NOT EXISTS (SELECT * FROM sys.sysdatabases WHERE Name='Cole')" & vbCrLf & _
    "CREATE DATABASE Cole" & vbCrLf & _
    "CREATE TABLE Cole.dbo.Descuentos(CodigoP VARCHAR(6),Fecha DATETIME,Minutos INT)" & vbCrLf & _
    "CREATE TABLE Cole.dbo.Profesores(CodigoP VARCHAR(6),Nombres VARCHAR(15),ApellidosP VARCHAR(15),ApellidosM VARCHAR(15),Edad VARCHAR(2))" & vbCrLf & _
    "CREATE TABLE Cole.dbo.Horario(CodHora CHAR,CodigoP VARCHAR(6),NomDia VARCHAR(7),Aula VARCHAR(2),Status INT)" & vbCrLf & _
    "CREATE TABLE Cole.dbo.Hora(CodHora CHAR,HoraIni VARCHAR(8), HoraFin VARCHAR(8))" & vbCrLf & _
    "CREATE TABLE Cole.dbo.Adm(Clave VARCHAR(30))" & vbCrLf & _
    "INSERT INTO Cole.dbo.Adm VALUES ('123456')", cnn)
      cnn.Open()
      cmd.ExecuteNonQuery()
      cnn.Close()
      cnn = New SqlConnection("Data Source=.\SQLEXPRESS; Initial Catalog=Cole; Integrated Security=True")
    
    


    Comparte lo que sepas, aprende lo que no sepas (FGG) http://www.portalsql.com
    viernes, 29 de julio de 2011 14:00
    Moderador