chocolim.com

De nada un poco

rainbow

Posts Tagged ‘SQL Server’

Recuperar el id del ultimo registro insertado

Algo muy comun es querer saber el id del ultimo registro insertado, aca posteo un ejemplo de como hacer eso para una base de datos SQL Server en c#:

SqlConnection conn= new SqlConnection(
ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString
);
string insertStr =
"INSERT INTO [tabla]([texto],[fecha]) VALUES(@texto,getDate())
;SELECT  Scope_Identity();";
SqlCommand cmd=new SqlCommand(insertStr,conn);
cmd.Parameters.Add("@texto", SqlDbType.NVarChar).Value="El texto va aca";
cmd.Connection.Open();
string ret=cmd.ExecuteScalar().ToString();
cmd.Connection.Close();

La parte clave esta en la sentencia Select Scope_Identity() del sql.

Equivalente de limit de mysql dentro del .net

No llegue a encontrar un equivalente directo del limit dentro de otra base de datos que no sea Mysql, pero el framework .net da la siguiente posibilidad para emular esa funcionalidad:

SqlDataSource sds = new SqlDataSource(
utils.getWebConfigConn("dbConnectionString"), 
"selec * from vendedores"
);
DataSourceSelectArguments sa = new DataSourceSelectArguments(10, 20);
DataView dv = (DataView)sds.Select(DataSourceSelectArguments .Empty);

Lo anterior traera las filas comenzando por la 11 y terminando en la 30 (como hace el limit del mysql) dentro del dataset que esta en dv.Table

Filas con 100%

Si una fila de tu tabla tiene un valor que incluya la frase 100% proceder asi:

SELECT * FROM tablename WHERE x LIKE '%100[%]%'

o

SELECT * FROM tablename WHERE x LIKE '%100\%%' ESCAPE '\'

EXECUTE permission denied on object sp_sdidebug, database master, owner dbo.

Este error choto(EXECUTE permission denied on object ‘sp_sdidebug’, database ‘master’, owner ‘dbo’.) se cura con:

GRANT EXECUTE ON sp_sdidebug TO 'username';

Obtener fechas en SQL Server

El primer dia del mes:

SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)

El Ultimo dia del mes:

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate()  )+1, 0));


El Lunes de la semana actual:

SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)


Primer dia del año:

SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)

Ultimo dia del mes anterior:

SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()  ), 0));

Ultimo dia del año anterior:

SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate() ), 0))

Primer lunes del mes:

SELECT DATEADD(wk, DATEDIFF(wk,0,
dateadd(dd,6-datepart(day,getdate()),getdate())), 0);

Listas las tablas de una base de datos

En MS SQL Server para saber los nombres de las tablas necesite hacer lo siguiente:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'