- SQLServer 2000
- SQLServer 2005
Tips about BI,DWH and so on..
SQLServer have no funtion to count the length of byte like LENB. This SQL provide same function. *TEST:VARCHAR(25)
DATALENGTH(CONVERT(VARCHAR(25), TEST))
You can see the lock status by sp_lock.
EXEC sp_lock GO
| Type | Description |
|---|---|
| DB | Database |
| FIL | File |
| IDX | Index |
| PG | Page |
| KEY | Key |
| TAB | Table |
| EXT | Extent |
| RID | Row ID |
This is the sample SQL to count the number of records at each table on current database.
CREATE TABLE [dbo].[TEST]( [TableName] VARCHAR(255) NOT NULL, [NrOfRecords] [int] NOT NULL ) ON [PRIMARY]
DECLARE @TABLE_NAME VARCHAR(255)
DECLARE @SQL VARCHAR(8000)
DECLARE C_TABLE CURSOR FOR
SELECT
name
FROM
sysobjects
WHERE
OBJECTPROPERTY(id, N'IsUserTable') = 1
AND status >= 0
ORDER BY
name
OPEN C_TABLE
FETCH NEXT FROM C_TABLE INTO @TABLE_NAME
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM C_TABLE INTO @TABLE_NAME
PRINT @TABLE_NAME
SET @SQL =
'
INSERT INTO TEST
SELECT ''' +
@TABLE_NAME + ''' AS TableName
,COUNT(*) AS NrOfRecords
FROM ' +
@TABLE_NAME
EXEC (@SQL)
END
CLOSE C_TABLE
This SQL returns userr tables in current database and their columns.
SELECT
O.name AS TableName
,C.name AS ColumnName
FROM
sysobjects O
INNER JOIN syscolumns C
on
O.id = C.ID
WHERE
OBJECTPROPERTY(O.id, N'IsUserTable') = 1
AND O.status >= 0
ORDER BY
O.name
,C.name
This SQL returns the table list on current database.
SELECT
name AS TableName
FROM
sysobjects
WHERE
OBJECTPROPERTY(id, N'IsUserTable') = 1
AND status >= 0
ORDER BY
name
This SQL return the job history of SQLServer Agent in yesterday.
SELECT
JobHistroy.run_status,
Jobs.name,
JobHistroy.step_id,
JobHistroy.step_name,
JobHistroy.message,
JobHistroy.run_date,
JobHistroy.run_time,
JobHistroy.server
FROM
msdb.dbo.sysjobs Jobs
INNER JOIN
msdb.dbo.sysjobhistory JobHistroy
ON
Jobs.job_id = JobHistroy.job_id
WHERE
run_date = CAST(
CAST(YEAR(GETDATE()-1) AS CHAR(4)) +
RIGHT('00' + CAST(MONTH(GETDATE()-1) AS VARCHAR(2)),2) +
RIGHT('00' + CAST(DAY(GETDATE()-1) AS VARCHAR(2)),2)
AS INT) and
step_id = 0
order by
jobs.name
You can get a job list on SQLServer as a table by this SQL.
SELECT TOP 100 PERCENT t1.name ,t2.step_id ,t2.step_name ,t2.command ,t4.plan_name ,t3.enabled ,CAST(LEFT(t3.active_start_date,4) + '/' + SUBSTRING(CAST(t3.active_start_date AS varchar), 5,2) + '/' + RIGHT(t3.active_start_date,2) AS datetime) AS active_start_date ,t3.active_start_time ,CAST(LEFT(t3.next_run_date, 4) + '/' + SUBSTRING(CAST(t3.next_run_date AS varchar), 5,2) + '/' + RIGHT(t3.next_run_date,2) AS datetime) AS next_run_date ,t3.next_run_time FROM dbo.sysjobs t1 INNER JOIN dbo.sysjobsteps t2 ON t1.job_id = t2.job_id INNER JOIN dbo.sysjobschedules t3 ON t1.job_id = t3.job_id LEFT OUTER JOIN dbo.sysdbmaintplans t4 ON SUBSTRING(t2.command,42,36) = CAST(t4.plan_id AS char(36)) ORDER BY t1.name