搜索指定数据在那个对象中存在CREATE PROC sp_ValueSearch
@value sql_variant, --要搜索的数据
@precision bit=1 --1=仅根据sql_variant中的数据类型查找对应类型的数据列.<>1,查询兼容的所有列,字符数据使用like匹配
AS
SET NOCOUNT ON
IF @value IS NULL RETURN--数据类型处理
SELECT xtype INTO #t FROM systypes
WHERE name=SQL_VARIANT_PROPERTY(@value,N'BaseType')--扩展数据类型及查询处理语句
DECLARE @sql nvarchar(4000),@sql1 nvarchar(4000)
IF @precision=1
SET @sql=CASE SQL_VARIANT_PROPERTY(@value,N'BaseType')
WHEN N'text' THEN N' LIKE N''%''+CAST(@value as varchar(8000))+''%'''
WHEN N'ntext' THEN N' LIKE ''%''+CAST(@value as nvarchar(4000))+''%'''
ELSE N'=@value' END
ELSE
BEGIN
SET @sql=CAST(SQL_VARIANT_PROPERTY(@value,N'BaseType') as sysname)
IF @sql LIKE N'%char' or @sql LIKE N'%text'
BEGIN
INSERT #t SELECT xtype FROM systypes
WHERE name LIKE N'%char' or name LIKE N'%text'
SELECT @sql=N' LIKE N''%''+CAST(@value as '
+CASE
WHEN LEFT(@sql,1)=N'n' THEN ' nvarchar(4000)'
ELSE 'varchar(8000)' END
+N')+N''%'''
END
ELSE IF @sql LIKE N'%datetime'
BEGIN
INSERT #t SELECT xtype FROM systypes
WHERE name LIKE N'%datetime'
SET @sql=N'=@value'
END
ELSE IF @sql LIKE N'%int'
OR @sql LIKE N'%money'
OR @sql IN(N'real',N'float',N'decimal',N'numeric')
BEGIN
INSERT #t SELECT xtype FROM systypes
WHERE name LIKE N'%int'
OR name LIKE N'%money'
OR name IN(N'real',N'float',N'decimal')
SET @sql=N'=@value'
END
ELSE
SET @sql=N'=@value'
END
--保存结果的临时表
CREATE TABLE #(TableName sysname,FieldName sysname,Type sysname,SQL nvarchar(4000))DECLARE tb CURSOR LOCAL
FOR
SELECT N'SELECT * FROM '
+QUOTENAME(USER_NAME(o.uid))
+N'.'+QUOTENAME(o.name)
+N' WHERE '+QUOTENAME(c.name)
+@sql,
N'INSERT # VALUES(N'+QUOTENAME(o.name,N'''')
+N',N'+QUOTENAME(c.name,N'''')
+N',N'+QUOTENAME(QUOTENAME(t.name)+CASE
WHEN t.name IN (N'decimal',N'numeric')
THEN N'('+CAST(c.prec as varchar)+N','+CAST(c.scale as varchar)+N')'
WHEN t.name=N'float'
OR t.name like N'%char'
OR t.name like N'%binary'
THEN N'('+CAST(c.prec as varchar)+N')'
ELSE N'' END,N'''')
+N',@sql)'
FROM sysobjects o,syscolumns c,systypes t,#t tt
WHERE o.id=c.id
AND c.xusertype=t.xusertype
AND t.xtype=tt.xtype
AND OBJECTPROPERTY(o.id,N'IsUserTable')=1OPEN tb
FETCH tb INTO @sql,@sql1
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql1=N'IF EXISTS('+@sql+N') '+@sql1
EXEC sp_executesql @sql1,N'@value sql_variant,@sql nvarchar(4000)',@value,@sql
FETCH tb INTO @sql,@sql1
END
CLOSE tb
DEALLOCATE tb
SELECT * FROM #
@value sql_variant, --要搜索的数据
@precision bit=1 --1=仅根据sql_variant中的数据类型查找对应类型的数据列.<>1,查询兼容的所有列,字符数据使用like匹配
AS
SET NOCOUNT ON
IF @value IS NULL RETURN--数据类型处理
SELECT xtype INTO #t FROM systypes
WHERE name=SQL_VARIANT_PROPERTY(@value,N'BaseType')--扩展数据类型及查询处理语句
DECLARE @sql nvarchar(4000),@sql1 nvarchar(4000)
IF @precision=1
SET @sql=CASE SQL_VARIANT_PROPERTY(@value,N'BaseType')
WHEN N'text' THEN N' LIKE N''%''+CAST(@value as varchar(8000))+''%'''
WHEN N'ntext' THEN N' LIKE ''%''+CAST(@value as nvarchar(4000))+''%'''
ELSE N'=@value' END
ELSE
BEGIN
SET @sql=CAST(SQL_VARIANT_PROPERTY(@value,N'BaseType') as sysname)
IF @sql LIKE N'%char' or @sql LIKE N'%text'
BEGIN
INSERT #t SELECT xtype FROM systypes
WHERE name LIKE N'%char' or name LIKE N'%text'
SELECT @sql=N' LIKE N''%''+CAST(@value as '
+CASE
WHEN LEFT(@sql,1)=N'n' THEN ' nvarchar(4000)'
ELSE 'varchar(8000)' END
+N')+N''%'''
END
ELSE IF @sql LIKE N'%datetime'
BEGIN
INSERT #t SELECT xtype FROM systypes
WHERE name LIKE N'%datetime'
SET @sql=N'=@value'
END
ELSE IF @sql LIKE N'%int'
OR @sql LIKE N'%money'
OR @sql IN(N'real',N'float',N'decimal',N'numeric')
BEGIN
INSERT #t SELECT xtype FROM systypes
WHERE name LIKE N'%int'
OR name LIKE N'%money'
OR name IN(N'real',N'float',N'decimal')
SET @sql=N'=@value'
END
ELSE
SET @sql=N'=@value'
END
--保存结果的临时表
CREATE TABLE #(TableName sysname,FieldName sysname,Type sysname,SQL nvarchar(4000))DECLARE tb CURSOR LOCAL
FOR
SELECT N'SELECT * FROM '
+QUOTENAME(USER_NAME(o.uid))
+N'.'+QUOTENAME(o.name)
+N' WHERE '+QUOTENAME(c.name)
+@sql,
N'INSERT # VALUES(N'+QUOTENAME(o.name,N'''')
+N',N'+QUOTENAME(c.name,N'''')
+N',N'+QUOTENAME(QUOTENAME(t.name)+CASE
WHEN t.name IN (N'decimal',N'numeric')
THEN N'('+CAST(c.prec as varchar)+N','+CAST(c.scale as varchar)+N')'
WHEN t.name=N'float'
OR t.name like N'%char'
OR t.name like N'%binary'
THEN N'('+CAST(c.prec as varchar)+N')'
ELSE N'' END,N'''')
+N',@sql)'
FROM sysobjects o,syscolumns c,systypes t,#t tt
WHERE o.id=c.id
AND c.xusertype=t.xusertype
AND t.xtype=tt.xtype
AND OBJECTPROPERTY(o.id,N'IsUserTable')=1OPEN tb
FETCH tb INTO @sql,@sql1
WHILE @@FETCH_STATUS=0
BEGIN
SET @sql1=N'IF EXISTS('+@sql+N') '+@sql1
EXEC sp_executesql @sql1,N'@value sql_variant,@sql nvarchar(4000)',@value,@sql
FETCH tb INTO @sql,@sql1
END
CLOSE tb
DEALLOCATE tb
SELECT * FROM #
set @str='White' --要搜索的字符串declare @s varchar(8000)
declare tb cursor local for
select s='if exists(select 1 from ['+b.name+'] where ['+a.name+'] like ''%'+@str+'%'')
print ''所在的表及字段: ['+b.name+'].['+a.name+']'''
from syscolumns a join sysobjects b on a.id=b.id
where b.xtype='U' and a.status>=0
and a.xusertype in(175,239,231,167)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
参考用cursor速度快不了多少
USE [MES]
GO
/****** Object: StoredProcedure [dbo].[SP_WKO_SCHEDULE] Script Date: 11/13/2008 20:14:13 ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[SP_WKO_SCHEDULE] AS
delete from WKO_SCHEDULE where dateadd(dd,60,ImportDate)<=getdate()
delete from WKO_SCHEDULE where (WKO_XB is null)and(WKO_BC is null)and(WKO_HS is null) if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ttt]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ttt] select * into ttt
from
(
select *,case IsSMT when 1 then NHR*WKO_QTY else NHR*WKO_QTY/BZRS end as womenyaode
from
(
select *,case isnull(TT,0) when 0 then WKO_TIMES/WKO_QTY else TT end as NHR,case isnull(RS,0) when 0 then 25 else RS end as BZRS
from
(
select *,
case WKO_TIMES when WKO_TIMES then (select NewHR/1000 from PRO_QUANTITY a where PN=WKO_ITEMNO and GX=WKO_GX and CBZX=WKO_CBZX) end as TT,
(select BZRS from PRO_QUANTITY where PN=WKO_ITEMNO and GX=WKO_GX and CBZX=WKO_CBZX) AS RS,case when WKO_CBZX in (select distinct CBZX from RES_XB where DomainType=1) then 1 else 0 end as IsSMT
from TMP_WKO_ORDER
) f where WKO_TYPE<>'WO' and WKO_TYPE<>'WW' and WKO_STATUS<91
)_f
)_ff where WKO_TIMES is not null
DECLARE @WKO_STATUS NVARCHAR(100),@WKO_ITEMNO NVARCHAR(100),@WKO_TYPE NVARCHAR(100),@WKO_DESC NVARCHAR(100),@WKO_BZRS NVARCHAR(100),@WKO_PLANER NVARCHAR(100),@WKO_QTY INT,@WKO_CBZX NVARCHAR(100),@WKO_GX INT ,@WKO_TIMES FLOAT,@WKO_ODATE NVARCHAR(100),@WKO_HS FLOAT ,@WKO_MOVECL FLOAT,@STATUS int
DECLARE @WKO_ORDERNO NVARCHAR(100)
declare Searchcursor cursor for select WKO_STATUS,WKO_ITEMNO,WKO_TYPE,WKO_DESC,RS,WKO_PLANNER,WKO_QTY,WKO_CBZX,WKO_GX,NHR,WKO_ODATE,womenyaode,WKO_ORDERNO from ttt
open Searchcursor
fetch next from Searchcursor into @WKO_STATUS,@WKO_ITEMNO,@WKO_TYPE,@WKO_DESC,@WKO_BZRS,@WKO_PLANER,@WKO_QTY,@WKO_CBZX,@WKO_GX,@WKO_TIMES,@WKO_ODATE,@WKO_HS,@WKO_ORDERNO
while(@@fetch_status=0)
begin
--print('前,WO:'+@WKO_ORDERNO+',GX:'+convert(nvarchar(20),@WKO_GX)+',CBZX:'+@WKO_CBZX)
if not exists(select * from WKO_BACK_SCHEDULE where WKO_ORDERNO=@WKO_ORDERNO and WKO_GX=@WKO_GX)
begin
--print('后,WO:'+@WKO_ORDERNO+',GX:'+convert(nvarchar(20),@WKO_GX)+',CBZX:'+@WKO_CBZX)
if not exists(select * from WKO_SCHEDULE where WKO_ORDERNO=@WKO_ORDERNO and WKO_GX=@WKO_GX and WKO_CBZX=@WKO_CBZX)
begin
EXEC SP_WKO_JPJJCL @WKO_ITEMNO,@WKO_GX,@WKO_CBZX,@Result=@WKO_MOVECL OUTPUT
INSERT INTO WKO_SCHEDULE(WKO_STATUS,WKO_ITEMNO,WKO_TYPE,WKO_DESC,WKO_BZRS,WKO_PLANER,WKO_QTY,WKO_CBZX,WKO_GX,WKO_TIMES,WKO_ODATE,WKO_HS,WKO_ORDERNO,WKO_MOVECL)
VALUES(@WKO_STATUS,@WKO_ITEMNO,@WKO_TYPE,@WKO_DESC,@WKO_BZRS,@WKO_PLANER,@WKO_QTY,@WKO_CBZX,@WKO_GX,@WKO_TIMES,@WKO_ODATE,@WKO_HS,@WKO_ORDERNO,@WKO_MOVECL)
end
end else
begin
update WKO_SCHEDULE set WKO_STATUS=@WKO_STATUS where WKO_ORDERNO=@WKO_ORDERNO and WKO_GX=@WKO_GX and WKO_CBZX=@WKO_CBZX
end
fetch next from Searchcursor into @WKO_STATUS,@WKO_ITEMNO,@WKO_TYPE,@WKO_DESC,@WKO_BZRS,@WKO_PLANER,@WKO_QTY,@WKO_CBZX,@WKO_GX,@WKO_TIMES,@WKO_ODATE,@WKO_HS,@WKO_ORDERNO
end
close Searchcursor
deallocate Searchcursor
drop table [dbo].[ttt]