Weblogs Código

RecorteX

» sql
73 usuarios y 243 recortes de código
Usuario

Contraseña
Crear cuenta
Estás viendo los recortes de la etiqueta sql

RSS
Recortes: 18

Etiquetas relacionadas:
Sqlserver
existe
tabla
procedimientos
columna
base
stored
passwords
concatenar
vbnet
registros
jdbc
duplicados
buscar
sysobjects
PHP
fk
csharp
where
server
libre
eliminar
busqueda
plsql
groupby
database
sp
mssql
encriptacion
case
table
ID
datos
almacenados
Oracle
exist
texto
procedures
java
dentro

Ver foreign keys en la bd

Escribe aquí el texto

 
  
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id,
fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id,
fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
 

Busca columna en Base (SQL server)

solo tienes que reemplazar la ‘a’ por el texto que buscas, ejemplo ‘nombreusuario’ o ‘usuario’

 
DECLARE @txt VARCHAR(20)
SET @txt = 'a'
SELECT     O.name + '.' + C.name AS Nombre, C.column_id AS NumeroColumna, sys.types.name AS TipoDeDato, sys.types.max_length TamanoMaximo, sys.types.PRECISION AS PRECISION, sys.types.scale AS Escala, 
                      sys.types.is_nullable AS Nullable, sys.types.is_user_defined AS DefinidoPorUsuario
FROM         sys.columns AS C INNER JOIN
                      sys.objects AS O ON C.OBJECT_ID = O.OBJECT_ID INNER JOIN
                      sys.types ON C.user_type_id = sys.types.user_type_id AND C.system_type_id = sys.types.system_type_id
WHERE     (C.name LIKE N'%' + @txt + '%')
ORDER BY O.name, NumeroColumna
 

Traer un DT desde un query en SqlServer

 
    Private Function getDT(ByVal qry As String, ByVal connectionString as string) As DataTable
        Dim dataSet As DataSet = New DataSet
        Dim conn As New SqlConnection(connectionString)
        Dim cmdString As String = qry
        Dim dataAdapter As New SqlDataAdapter(cmdString, conn)
        Dim ds As New DataSet()
        dataAdapter.Fill(ds, "dt")
 
        Return ds.Tables("dt")
    End Function
 
 
    private DataTable getDT(String qry, String  connectionString)
    {
        DataSet dataSet = new DataSet();
        SqlConnection conn = new SqlConnection(connectionString);
        SqlDataAdapter dataAdapter = new SqlDataAdapter(qry, conn);
        DataSet ds= new DataSet();
        dataAdapter.Fill(ds, "dt");
  
        return ds.Tables ["dt"];
    }
 

Cambiar nombre bd sqlserver

Escribe aquí el texto

 
  
 
-- Make the DB SINGLE user 
ALTER DATABASE nombre_tablaVieja SET SINGLE_USER WITH ROLLBACK IMMEDIATE
 
--RENAME
 
exec  sp_renamedb 'nombre_tablaVieja', 'nombre_tabla_nueva'
 
-- Make the DB multi user again
ALTER DATABASE nombre_tabla_nueva SET MULTI_USER
 

Cómo importar datos a SQL Server desde distintos orígenes de datos

Por Enrique Martínez Montejo «SoftJaén»
[MS MVP – VB]
Última revisión: 09/09/2004

Mediante las funciones OPENDATASOURCE y OPENROWSET de Transact-SQL, puede importar datos a una base de SQL Server desde distintos orígenes de datos OLE DB, como bien podría ser una base de datos Microsoft Access, un libro de trabajo de Microsoft Excel, o un simple archivo de texto delimitado, entre otros orígenes de datos que dispongan de su correspondiente controlador ISAM instalable.

Importar datos desde una base de datos Access no protegida
Si nuestra base de datos Access no se encuentra protegida con cualquiera de los dos niveles de protección (a nivel compartido o a nivel de usuario), podemos utilizar la función OPENROWSET para importar datos a una base de SQL Server. En este supuesto, es sumamente necesario que el usuario genérico Admin tenga acceso a los datos que se desean importar desde la base de datos de Access, ya que será dicho usuario el que ejecutará la importación:

 
 
Dim cnn AS ADODB.Connection
Dim lngRegAfectados AS Long
Dim SQL AS String
 
' Configuramos una conexión con la base de
' datos de SQL Server, utilizando la seguridad
' integrado de Windows NT
'
SET cnn = New ADODB.Connection
WITH cnn
    .CursorLocation = adUseClient
    .Provider = "SQLOLEDB"
    .ConnectionString = "Data Source=NOMBRE_INSTANCIA_SQL_SERVER;" & _
        "Initial Catalog=Northwind;" & _
        "Integrated Security=SSPI;"
    .Open
End WITH
 
' Si la tabla ya existe en la base de datos de
' SQL Server, la eliminamos
'
cnn.Execute _
    "IF EXISTS(" & _
        "SELECT * FROM INFORMATION_SCHEMA.TABLES " & _
        "WHERE TABLE_NAME = 'TablaDeAccess')" & _
    "DROP TABLE TablaDeAccess", , adCmdText
 
' Construimos la consulta SQL de creación de tabla para
' importar la tabla Clientes de la base de datos Neptuno.mdb
'
SQL = "SELECT * INTO TablaDeAccess " & _
      "FROM OPENROWSET(" & _
        "'Microsoft.Jet.OLEDB.4.0'," & _
        "'C:\Mis documentos\Neptuno.mdb';" & _
        "'admin';''," & _
        "'SELECT * FROM Clientes')"
 
' Ejecutamos la consulta
'
cnn.Execute SQL, lngRegAfectados, adCmdText
 
' Comprobamos los registros afectados
'
MsgBox "Registros afectados: " & lngRegAfectados
 
' Cerramos la conexión
'
cnn.Close
 

Importar datos desde una base de datos Access protegida a nivel compartido
Si la base de datos de Access sólo se encuentra protegida a nivel compartido (tiene establecida una contraseña), utilizaríamos la siguiente sintaxis de la función OPENROWSET:

 
' Construimos la consulta SQL de creación de tabla para
' importar la tabla Clientes de la base de datos Neptuno.mdb
'
SQL = "SELECT * INTO TablaDeAccess " & _
      "FROM OPENROWSET(" & _
      "'Microsoft.Jet.OLEDB.4.0'," & _
      "'MS Access;" & _
          "DATABASE=C:\Mis documentos\Neptuno.mdb;" & _
          "UID=Admin;" & _
          "PWD=contraseña'," & _
      "'SELECT * FROM Clientes')"

Tenga en cuenta que el parámetro PWD se refiere exclusívamente a la contraseña de la base de datos, no a la contraseña del usuario Admin, que en el supuesto de disponer de alguna e indicarla en el citado parámetro, la importación no se podrá llevar a cabo, debido a que obtendrá el error: No es una contraseña válida.

Importar datos desde una base de datos Access protegida a nivel compartido y a nivel de usuario
En el supuesto de que la base de datos de Access se encuentra protegida mediante una contraseña (seguridad a nivel compartido), y a la vez necesitamos que sea otro usuario distinto al usuario génerico Admin el que acceda a los datos (seguridad a nivel de usuario), en lugar de utilizar la función OPENROWSET necesitará utilizar la función OPENDATASOURCE, dado que la primera no permite indicar los parámetros de conexión para especificar la contraseña de la base de datos, así como la ruta del archivo de información de grupos de trabajo, dado que a la fecha de publicación de éste artículo, no he encontrado la manera de poder especificar dichos parámetros mediante la función OPENROWSET:

 
' Construimos la consulta SQL de creación de tabla para
' importar la tabla Clientes de la base de datos Neptuno.mdb
'
SQL = "SELECT * INTO TablaDeAccess " & _
      "FROM OPENDATASOURCE(" & _
      "'Microsoft.Jet.OLEDB.4.0'," & _
      "'DATA Source=C:\Mis documentos\Neptuno.mdb;" & _
        "Jet OLEDB:DATABASE Password=contraseña_base_datos;" & _
        "Jet OLEDB:System DATABASE=C:\Windows\System32\System.mdw;" & _
        "User Id=cuenta_usuario;" & _
        "Password=contraseña_usuario')" & _
      "... Clientes"

Importar datos desde un libro de trabajo de Excel
Si desea importar a SQL Server datos de una hoja de cálculo de Excel, puede utilizar tanto la función OPENROWSET como la función OPENDATASOURCE, debiendo tener en cuenta que si desea especificar una hoja de cálculo, deberá de encerrar su nombre entre corchetes y añadir el signo $, como por ejemplo, [Hoja1$]. Si desea especificar un rango de celdas con nombre, especifique solamente el nombre del rango sin el signo del dólar.

Una vez que tenga establecida una conexión con la base de datos de SQL Server, puede ejecutar cualquiera de las siguientes consultas SQL:

 
'Importar un rango de celdas con nombre 
SQL = "SELECT * INTO TablaDeExcel " & _
      "FROM OPENDATASOURCE(" & _
      "'Microsoft.Jet.OLEDB.4.0'," & _
      "'DATA Source=C:\Mis documentos\Libro1.xls;" & _
        "Extended Properties=""Excel 8.0;HDR=No""')" & _
      "...Clientes"

Si utiliza la función OPENDATASOURCE, observe que deberá de encerrar entre dos pares de comillas dobles los parámetros del ISAM de Excel que desee especificar, cuestión ésta que no es necesario indicar si utiliza la función OPENROWSET, tal y como se muestra a continuación.

 
'Importar una hoja de cálculo completa 
SQL = "SELECT * INTO TablaDeExcel " & _
      "FROM OPENROWSET(" & _
      "'Microsoft.Jet.OLEDB.4.0'," & _
      "'Excel 8.0;Database=C:\Mis documentos\Libro1.xls;HDR=Yes'," & _
      "'SELECT * FROM [Hoja1$]')"

Importar datos desde un archivo de texto delimitado
Por último, mostraré la forma de importar los datos contenidos en un archivo de texto a nuestra base de datos de SQL Server, trabajo éste que podrá realizarlo mediante las dos funciones T-SQL comentadas. Indicar únicamente que sólo deberá de especificar la ruta de la carpeta donde se encuentre el archivo de texto, escribiendo el nombre del archivo y su extensión en la cláusula FROM de la consulta SQL

 
'Importar mediante la función OPENROWSET 
 SQL = "SELECT * INTO TablaDeTexto " & _
       "FROM OPENROWSET(" & _
       "'Microsoft.Jet.OLEDB.4.0'," & _
       "'TEXT;Database=C:\Mis documentos;HDR=No'," & _
       "'SELECT * FROM Clientes#txt')"
 
'Importar mediante la función OPENDATASOURCE 
SQL = "SELECT * INTO TablaDeTexto " & _
      "FROM OPENDATASOURCE(" & _
      "'Microsoft.Jet.OLEDB.4.0'," & _
      "'DATA Source=C:\Mis documentos;" & _
        "Extended Properties=""TEXT;HDR=Yes""')" & _
      "...Clientes#txt"

Hacer busquedas de texto en toda la base de datos

Procedimiento para hacer busquedas en toda la base de datos, para ejecutarlo:
EXEC SearchAllTables ‘Palabra o cadena a buscar’.

Procedimiento:

 
 
CREATE PROC SearchAllTables
(
@SearchStr nvarchar(100)
)
AS
BEGIN
 
-- Copyright © 2002 Narayana Vyas Kondreddi. All rights reserved.
-- Purpose: To search all columns of all tables for a given search string
-- Written by: Narayana Vyas Kondreddi
-- Site: http://vyaskn.tripod.com
-- Tested on: SQL Server 7.0 and SQL Server 2000
-- Date modified: 28th July 2002 22:50 GMT
 
 
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
 
SET NOCOUNT ON
 
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET  @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
 
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName = 
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
       ) = 0
)
 
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
 
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630) 
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END 
END
 
SELECT ColumnName, ColumnValue FROM #Results
END
 
 
GO
 

Encontrar un ID libre en una tabla de una base de datos

Pues es sencillo: se sacan todos los IDs de la tabla y se inicializa una variable a 0 (el ID mínimo) y se va mirando si está en la matriz de los IDs de la tabla. Si está en la matriz, probar con el siguiente ($i++), pero si no está, hemos encontrado un ID reutilizable (o nuevo, si se ha llegado al límite de la matriz).

Principalmente sirve para no tener que meter un ID nuevo en una tabla, si ya se han liberado IDs (borrado registros) anteriormente. Así además el tamaño del campo ID no hace falta que sea muy grande si se eliminan y se añaden muchos registros.

 
  // Doy por supuesto que ya se ha conectado a una base de datos
  // $tabla es el nombre de la tabla en donde hay que buscar un ID libre
  
  function buscar_id_libre($tabla){
      global $db;
      // Sacar todos los IDs de la tabla
      $res = mysql_query("SELECT id FROM $tabla");
      if($res){
          while(false !== ($reg = mysql_fetch_assoc($res)))
                  $ids[] = intval($reg['id']);
      }else{
          $ids = array(0);
      }
 
      // Buscar un ID que no este en la matriz (o en la tabla)
      $i = 0;
      while(in_array($i, $ids)){
          $i++;
      }
      return $i;
  }
 

Encriptar y desencriptar passwords en SQL

Podemos hacer uso de dos funciones de SQL Server para encryptar los passwords de nuestras aplicaciones.

 
  SELECT pwdencrypt('Este es mi password')
 

De esta forma obtenemos: 0×01005101FF5BAF0870CDDB687D126DE8E65F5164C9A010FBB1A9FD399669CE78013B4F2042AE2947EB06FB7AF34F

Con esta funcion podemos comparar el password que recibimos para poder verificar si esta correcto, ya que no hay ninguna funcion que nos desencripte la secuencia obtenida

 
  SELECT pwdcompare ('Este es mi password',pwdencrypt('Este es mi passworD'))
 

Asi solo obtenemos un 1 o 0

Si existe una tabla

 
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='tbl_mexicalas') SELECT 'tablename exists.'
 

Si existe una columna

 
IF EXISTS (SELECT * FROM syscolumns WHERE id = object_id('tbl_clientes') AND name = 'cNumGrupo')
begin
	print('yes')
end
 
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin