查指定的表的所有字段中是否有指定的字符串

zuoguangxin18 2018-01-29 11:34:35
-- 判断要创建的存储过程名是否存在
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[全文查详单]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
-- 删除存储过程
drop procedure [dbo].[全文查详单]
GO

create procedure [dbo].[全文查详单]
(
@value varchar(1024),---传入的查的字符
@biaojiHE nvarchar(4000)=‘( select 手机号码 from [案件信息表])’---传入的值select 手机号码 from [案件信息表]
)
as
begin

set nocount on;---不返回影响行
declare @sql varchar(1024)
declare @sql2 nvarchar(4000) -- 这里要用这个类型
declare @table varchar(64)
declare @column varchar(64)
declare @jishu varchar(64)

create table #t (
详单名 varchar(64),
字段名 varchar(64),
出现次数 varchar(64)
)

declare tables cursor
for
---查所有表和列
select o.name, c.name
from syscolumns c
inner join sysobjects o on c.id = o.id
where o.type = 'u' and c.xtype in (167, 175, 231, 239) and (o.name in ( select 手机号码 from [案件信息表]))---用变量不行
order by o.name, c.name

open tables
fetch next from tables into @table, @column
..........................
以上是代码,现在我想把:where o.type = 'u' and c.xtype in (167, 175, 231, 239) and (o.name in ( select 手机号码 from [案件信息表])) 中的select 手机号码 from [案件信息表] 用 @biaojiHE 代替,总是不行。

请教大家如何用传入的值 @biaojiHE
...全文
288 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2018-01-29
  • 打赏
  • 举报
回复
在这个位置加、 fetch next from tables into @table, @column 后面

SET @sql='SELECT * FROM '+@table+' WHERE '+@column+' IN('+@biaojiHE+')'
中国风 2018-01-29
  • 打赏
  • 举报
回复
看你的需求 @biaojiHE--这条件应该放在拼凑语句里
听雨停了 2018-01-29
  • 打赏
  • 举报
回复

select o.name, c.name 
from syscolumns c 
inner join sysobjects o on c.id = o.id 
where o.type = 'u' and c.xtype in (167, 175, 231, 239)  and (o.name in ( select 手机号码 from [案件信息表]))---用变量不行
order by o.name, c.name 


--把上面sql替换成下面的就ok了
DECLARE @sql VARCHAR(max),
		@biaojiHE VARCHAR(max)
SET @biaojiHE ='select 手机号码 from [案件信息表]'
SET @sql='select o.name, c.name 
    from syscolumns c 
    inner join sysobjects o on c.id = o.id 
    where o.type = ''u'' and c.xtype in (167, 175, 231, 239)  and (o.name in ( '+@biaojiHE+'))
    order by o.name, c.name 
' 
--PRINT @sql
EXEC (@sql)
听雨停了 2018-01-29
  • 打赏
  • 举报
回复
引用 4 楼 zuoguangxin18 的回复:
[quote=引用 1 楼 qq_37170555 的回复:]

select o.name, c.name 
from syscolumns c 
inner join sysobjects o on c.id = o.id 
where o.type = 'u' and c.xtype in (167, 175, 231, 239)  and (o.name in ( select 手机号码 from [案件信息表]))---用变量不行
order by o.name, c.name 


--把上面sql替换成下面的就ok了
DECLARE @sql VARCHAR(max),
		@biaojiHE VARCHAR(max)
SET @biaojiHE ='select 手机号码 from [案件信息表]'
SET @sql='select o.name, c.name 
    from syscolumns c 
    inner join sysobjects o on c.id = o.id 
    where o.type = ''u'' and c.xtype in (167, 175, 231, 239)  and (o.name in ( '+@biaojiHE+'))
    order by o.name, c.name 
' 
--PRINT @sql
EXEC (@sql)
那怎么和 declare tables cursor for 这个联起来? [/quote]

DECLARE @sql VARCHAR(max),
        @biaojiHE VARCHAR(max)
SET @biaojiHE ='select 手机号码 from [案件信息表]'

SET @sql='
	declare tables cursor 
	for
	select o.name, c.name 
    from syscolumns c 
    inner join sysobjects o on c.id = o.id 
    where o.type = ''u'' and c.xtype in (167, 175, 231, 239)  and (o.name in ( '+@biaojiHE+'))
    order by o.name, c.name 
    open tables 
	fetch next from tables into '+@table+','+@column
--PRINT @sql
EXEC (@sql) 
把创建游标的sql也一起拼接进去就ok了
zuoguangxin18 2018-01-29
  • 打赏
  • 举报
回复
引用 1 楼 qq_37170555 的回复:

select o.name, c.name 
from syscolumns c 
inner join sysobjects o on c.id = o.id 
where o.type = 'u' and c.xtype in (167, 175, 231, 239)  and (o.name in ( select 手机号码 from [案件信息表]))---用变量不行
order by o.name, c.name 


--把上面sql替换成下面的就ok了
DECLARE @sql VARCHAR(max),
		@biaojiHE VARCHAR(max)
SET @biaojiHE ='select 手机号码 from [案件信息表]'
SET @sql='select o.name, c.name 
    from syscolumns c 
    inner join sysobjects o on c.id = o.id 
    where o.type = ''u'' and c.xtype in (167, 175, 231, 239)  and (o.name in ( '+@biaojiHE+'))
    order by o.name, c.name 
' 
--PRINT @sql
EXEC (@sql)
那怎么和 declare tables cursor for 这个联起来?
Date 对象属性constructor 返回对创建此对象的 Date 函数的引用。prototype 使您有能力向对象添加属性和方法。Date 对象方法getDate() 从 Date 对象返回一个月的某一天 (1 ~ 31)。getDay() 从 Date 对象返回一周的某一天 (0 ~ 6)。getFullYear() 从 Date 对象以四位数字返回年份。getHours() 返回 Date 对象的小时 (0 ~ 23)。getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。getMonth() 从 Date 对象返回月份 (0 ~ 11)。getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。getTime() 返回 1970 年 1 月 1 日至今的毫秒数。getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。getUTCDate() 根据世界时从 Date 对象返回月的一天 (1 ~ 31)。getUTCDay() 根据世界时从 Date 对象返回周的一天 (0 ~ 6)。getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。getYear() 已废弃。 请使用 getFullYear() 方法代替。parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。setDate() 设置 Date 对象月的某一天 (1 ~ 31)。setFullYear() 设置 Date 对象的年份(四位数字)。setHours() 设置 Date 对象的小时 (0 ~ 23)。setMilliseconds() 设置 Date 对象的毫秒 (0 ~ 999)。setMinutes() 设置 Date 对象的分钟 (0 ~ 59)。setMonth() 设置 Date 对象月份 (0 ~ 11)。setSeconds() 设置 Date 对象的秒钟 (0 ~ 59)。setTime() setTime() 方法以毫秒设置 Date 对象。setUTCDate() 根据世界时设置 Date 对象月份的一天 (1 ~ 31)。setUTCFullYear() 根据世界时设置 Date 对象的年份(四位数字)。setUTCHours() 根据世界时设置 Date 对象的小时 (0 ~ 23)。setUTCMilliseconds() 根据世界时设置 Date 对象的毫秒 (0 ~ 999)。setUTCMinutes() 根据世界时设置 Date 对象的分钟 (0 ~ 59)。setUTCMonth() 根据世界时设置 Date 对象的月份 (0 ~ 11)。setUTCSeconds() setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。setYear() 已废弃。请使用 setFullYear() 方法代替。toDateString() 把 Date 对象的日期部分转换为字符串。toGMTString() 已废弃。请使用 toUTCString() 方法代替。toISOString() 使用 ISO 标准返回字符串的日期格式。toJSON() 以 JSON 数据格式返回日期字符串。toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。toLocaleString() 据本地时间格式,把 Date 对象转换为字符串。toString() 把 Date 对象转换为字符串。toTimeString() 把 Date 对象的时间部分转换为字符串。toUTCString() 根据世界时,把 Date 对象转换为字符串。UTC() 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。valueOf() 返回 Date 对象的原始值。

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧