日度归档:2018年5月8日

mssql sqlserver 获取表内容”包含指定值”的方法分享


摘要:
在一次项目升级中,用户方要求查一下数据库中包含“指定内容”的数据表名及相应的列名,
下文将采用遍历所有列名的方法,将符合条件的信息输出


1 首先根据 INFORMATION_SCHEMA.COLUMNS和sysobjects系统表获取生成所有列名遍历的查询语句

注意事项:
此查询如果对于数据量大的数据表会非常耗时

例:

  set NOCOUNT ON
Declare @maxCount bigint
declare @i bigint
declare @rowCount bigint
DECLARE @tmpTable TABLE
(
keyid bigint identity (1,1),
sqlInfo varchar(max)
) 
 
 ----生成表内容包含 "maomao"的表sql  
INSERT INTO @tmpTable(sqlInfo)
select 'select @rowCount=count (['+COLUMN_NAME+']) from ['+TABLE_NAME+'] where ['+COLUMN_NAME+'] like ''%maomao''' from INFORMATION_SCHEMA.COLUMNS isc, sysobjects so where isc.TABLE_NAME=so.name and so.xtype='U' --where COLUMN_NAME like '%mail%'
 
 
---select * from @tmpTable as t 
set @i=1
set @maxCount=(select max(keyId) from @tmpTable)
 
while (@i <=@maxCount )
begin
Declare @sql nvarchar(500)
set @sql=(SELECT sqlInfo FROM @tmpTable where keyId=@i)

exec sp_executesql @sql, N'@rowCount int out',  @rowCount out

if(@rowCount > 0)
begin
 --打印出包含指定字符的sql脚本
print @sql   
end

set @i=@i+1
end
 

mssql sqlserver 生成大量测试数据的方法分享


摘要:
当我们进行数据调优时,通常需要大数据量,但是此时我们手上有没有大数据样本,下文将分享大数据样本的建立方法


如果需下载实例数据库 AdventureWorks2012
如果没有,请从 https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks
下载
例:
生成一个数据表testInfo ,表拥有1000行数据,如下所示:
declare @rowsmax bigint
set @rowsmax =1000 —-设定1000行数据

 CREATE TABLE testInfo(OrderID BigInt Primary Key,
CustomerID BigInt,
FirstName Varchar(100),
LastName Varchar(100),
ProductID Bigint,
UnitPrice Decimal(10,2),
OrderAmount Decimal(10,2),
OrderDate Datetime,
ShipDate Datetime)
GO

--插入数据
declare @rowsmax Bigint =1000
;With CTE AS (
			Select Row_Number() Over (Order BY A.BusinessEntityID) CustomerID ,
				   A.FirstName ,
				   B.LastName 
			FROM person.person A CROSS JOIN person.person B)
INSERT INTO testInfo(OrderID,CustomerID,FirstName,LastName,ProductID,UnitPrice,OrderAmount,OrderDate,ShipDate )
SELECT distinct OrderID,X.CustomerID,FirstName,LastName,ProductID,UnitPrice,OrderAmount,OrderDate,ShipDate 
FROM (SELECT Row_Number() Over (Order BY cAST(A.CustomerID AS BIGINT)) OrderID,A.*,SalesOrderID,ProductID,B.UnitPrice,LineTotal OrderAmount 
FROM CTE A CROSS JOIN   sales.salesOrderDetail B ) X
JOIN [Sales].[SalesOrderHeader] C ON C.SalesOrderID =X.SalesOrderID
WHERE OrderID<=@rowsmax
  

mssql sqlserver-如何在SQL Server中查找空闲的日志空间?


摘要:
一般的文章通常讲述如何缩小日志文件,但是下文将描述如何监控sql server的空闲日志空间。


下文将展示监控SQL Server中的日志空闲空间的两种方法:
方法1:使用sqlperf关键字,如下所示:

 DBCC SQLPERF ('LOGSPACE')
GO 

mssql_sqlserver_sqlperf关键字

mssql_sqlserver_sqlperf关键字


方法2: 使用动态管理函数 sys.dm_db_log_space_usage 获取空闲日志:
方法2 可以非常直观的展示出当前数据库实例下,总的日志空间利用情况

 SELECT total_log_size_in_bytes*1.0/1024/1024  as [总日志空间M],
used_log_space_in_bytes*1.0/1024/1024 as [已用日志空间M],
(total_log_size_in_bytes - used_log_space_in_bytes)*1.0/1024/1024
AS   [空闲日志空间M]
FROM sys.dm_db_log_space_usage; 
mssql_sqlserver_空闲日志空间查看方法

mssql_sqlserver_空闲日志空间查看方法