技术工程师如何在军队中立足?

640?wx_fmt=gif

五角大楼正在打造一支 IT 技术精湛的士兵队伍。

640?wx_fmt=jpeg

Chris Lynch,美国国防部数字化部门负责人,在五角大楼工作

2017 年初,当尼科尔·卡马里奥(NICOLE CAMARILLO)在马里兰州米德堡的军事基地访问时,一位年轻的军官(化名“马特”,由于部队身份信息敏感,我无法透露他的真实名字)给她留下了深刻的印象。

卡马里奥回忆道:“我必须和这位年轻人聊一聊”。在这几周前,她看到马特发表了一篇演讲,他在演讲中提到自己正在开发一款工具,用来在中东对抗敌人发起的无人机袭击。他解释说,这项技术是在“超低预算”的基础上发展起来的。

这引起了卡马里奥的注意。作为美国陆军网络司令部(一个相对较新的陆军分支)的人才战略执行总监,卡马里奥的工作是说服硅谷的高级员工,说服他们放弃自己的股票期权和六位数的工资,把他们掌握的技术知识运用到军队。她希望有更多与马特技术水平相当的硅谷员工能够投身军队,开发出更多拯救士兵生命的工具,但是事情的结果不如她想象的顺利。

卡马里奥找到马特想要对他提供帮助。她询问马特在军队技术研发过程中遇到的障碍。马特决定亲自展示给她看,他把卡马里奥带到一个改建的兵营,在那里他和他的团队创建了一个临时工作室。他们在一个旧的淋浴间里焊接金属零件。由于政府发布的计算机安全限制使他们无法编程,于是他们购买了替换零件来建造自己的计算机。技术人员帮助他们规避了既昂贵又耗时的军队采购流程,正规的流程可能会把工作推迟数月甚至数年之久。

整个场景让卡马里奥想起了曾经诞生苹果和惠普的车库,看起来有一丝浪漫。但卡马里奥还是怀着担忧离开的,她意识到,军队已经拥有了足够的技术人才,他们迫切需要的是一个更加良好的环境。

卡马里奥说:“他们利用如此有限的资源都可以做出惊人的成果,如果我们给他们释放更多的权限,提供更多的资源,会发生什么?他们能做什么?”

一年之后,陆军网络和国防部数字服务(DDS)建立了正式合作伙伴关系,后者是国防部的一种科技创业公司。新机构名为 Jyn Erso,它将陆军的顶级技术专家与私营部门的专家进行了合并。Jyn Erso 团队在五角大楼的国防部数字服务办公室工作,快速开发着各种工具,国防部为了构建这些工具,已经花费了数亿美元,并耗时多年。

从 2015 年开始,DDS 为了实现这一目标还启动一项其他的计划。DDS 把硅谷的极客们聚集到华盛顿,打破军事官僚机构的泥潭,快速构建出真正用户友好的技术。计划启动之后,DDS 团队的确建立了有效的技术,帮助服务成员跟踪记录,甚至为北约重新设计一个神秘的软件,并部署到了阿富汗。

然而,在这段时间里,DDS 主管 Chris Lynch 从未想过在军队中可以找到高水平的技术人才。他陪同卡马里奥参观了米德堡军事基地,他说:“我的团队是我国最优秀的,这种技术人才不会出现在部队。”

多年来,军队中的技术人才指的是精通武器装备的士兵,而不是那些知道如何编写软件的士兵。比如马特,他是出自西点军校的计算机科学家,曾在国家安全局工作过,在陆军服役了七年。但是,当他加入陆军时,并没有网络部供他选择。直到 2015 年,陆军才开辟这条分支。

马特说:“陆军并不知道如何发挥我的长处,他们把我送到了突击队,我学会了跳飞机和使用步枪。”

后来马特来到了陆军网络部门,但是部队提供给他的计算机仍然处处受限,他无法使用这些计算机编写代码。

卡马里奥和 Lynch 想给马特这样的士兵提供基地没有的自由。因此,在 2017 年春天,他们向军队网络前指挥官保罗·纳卡松将军提出了一个新的想法:他们希望将一小群陆军士兵带到五角大楼,让他们与 DDS 一起工作两到三个月。最初,指挥官并不愿意。

卡马里奥说:“指挥官认为 DDS 正试图挖走我们最好的士兵。”

现任国家安全局的负责人已经让步,并同意让卡马里奥和 Lynch 借用少数几名士兵来研究能够阻止敌方无人机的技术。他们称这个项目为 Jyn 1,因为他们希望这是 Jyn Erso 计划中的第一个项目。

马特开始在陆军队伍中亲自挑选他的团队成员。他的朋友,和他一起在米德堡的工作室工作过的西点军校毕业生,一位即将在陆军网络学校任职的才华横溢的统计学家,以及一名喜欢黑客汽车的飞机技师,一个接一个,他们被挖掘出来与 DDS 团队一起工作。DDS 团队的成员有来自 Facebook、Deloitte 和 Dropbox 等顶级科技公司的工程师、设计师和项目经理,甚至还有一名海军陆战队飞行员。

2017 年 5 月,士兵们身着军装到五角大楼报到。当时 DDS 的项目经理回忆道:“我让他们下周来的时候身着便装即可,并为他们配备了 Macbook 。”

在 Jyn Erso 团队成立之前,有一个问题困扰着军方,那就是如何才能阻止 ISIS 在我们士兵的头上投下手榴弹。

据卡马里奥称,这是军方花费 7 亿美元试图解决的一个问题。防空网可以有效击毁无人机,但是军方提供侦查无人机的设备太过笨重,士兵不便携带。法国空军训练老鹰抓捕无人机。

该团队决定建造一个手持无线电工具,无需用卡车运输,可以精确地瞄准敌方无人机,而不会干扰到附近的通信。

他们还希望确保设备上的软件能够持续更新,以识别新的商用无人机。DDS 的软件工程师,海军陆战队少校 Tom Bereknyei 表示,与 ISIS 对抗的核心挑战在于,敌机使用的现成技术比对抗工具更为灵活,因为构建工具需要美国政府制定和批准,构建过程可能需要 10 年时间。随着商用无人机新型号的问世,敌人可以利用它们来作恶,因为他们可以说是为孩子买的玩具。Tom Bereknyei 继续说:“我们必须不断提升自己的能力,来打击新型无人机。”

马特在米德堡军事基地工作时面临多方阻碍,而如今的工作环境让他如鱼得水。Jyn 1 团队从当地制造商订购了 3D 打印机,他们可以在那里打印零件,并在笔记本电脑上工作,与米德堡的军事基地不同,这里的笔记本电脑允许他们编写代码。他们将 DDS 办公室变成了一个试验场,将铝箔包裹的垃圾桶放在两侧,以制造临时的法拉第笼。

他们日复一日地观察无人机遥控器上的指示灯,等待它从闪烁的绿灯(表明识别到无人机)变为红灯(表明它已经被干扰)。大约四周的开发时间,绿灯就变为了红灯,他们成功了!

但是,最有意义的差异可能是团队能够在战场上进行用户测试。这在军事采购过程中几乎闻所未闻,在这个过程中,承包商得到了政府官员起草的一系列要求。通常情况下,士兵经过多次反馈之后才会尝试使用该产品。Lynch 已经说服国防部将 DDS 工作人员派往阿富汗。经过一番争吵之后,最终获得了批准,并于 2017 年 8 月,该团队又开始了另一次前往中东地区的秘密行程。

那次行动几乎完全改变了工具的设计。给现场士兵演示之后,他们意识到他们需要完全抛弃现有的花哨的用户界面,改用三个简单设置的模拟刻度盘代替。马特说:“团队的所有成员都竭尽全力,想要让这个设备尽可能自动化地运转。”

团队愿意彻底改革设计方案,这让士兵颇为意外和震惊。二级准尉兼测试组成员 Cecil Fox 说:“这是我第一次看到像这样的采购流程,他们带着一个初步的概念来到我们面前,并在正式投产之前充分搜集我们的意见,力争为我们提供真正想要的设备。”

他与士兵们的沟通也对设备的优化有所帮助。Fox 说:“我们基于设备的多个层面进行了深入的探讨。”

Jyn 1 团队返回五角大楼进行必要的更改,并在2018年1月,他们飞回战场进行最后一次测试,这次恰巧是一群年轻的步兵正在接受基础训练。Jyn Erso 团队坐下来,没有任何指示地把设备递给他们,没有任何指导和说明,然后等着看士兵是否会使用这台设备。

他们做到了!该项目的软件工程师 Dan Lim 中尉回忆道:“他们从设备上只能看到一个旋钮和闪烁的指示灯,但是当他们向远处看时,发现无人机无法靠近它们飞行。这些年轻的步兵完全没有任何经验,居然能够在一分钟内摸索出设备的使用方法。”

据 DDS 称,国防部 Jyn 1 项目的成本低于10万美元,相比之下,承包商试图解决同样问题的成本为数亿美元。在完成首批采购订单后,该团队正在将 Jyn 1 规格交给五角大楼以外的合作伙伴,以继续生产这些工具。Jyn Erso 不会完全取代承包商,但是卡马里奥和 Lynch 希望这种模式可以继续为军方所用,它更具成本效益,并且能够更准确把握士兵的需求。Jyn Erso 团队已经启动了另一个名为 Jyn 2 的项目,专注于网络士兵在国防部网络上追捕敌人的新方法。

得益于 Jyn Erso 计划的成功,DDS 已经改变了其人才范围。它仍然在硅谷招募,但也开始从部队中发掘和培养顶尖技术人才。面对国际黑客和高科技对手的挑战,像这样的项目对于军队来说至关重要,因为它可以帮助军队更好地适应现代化战争。

Bereknyei 说:“军方认为他们面临的主要问题是人才匮乏。” 而 Jyn Erso 证明了这个理论是错误的。“我们改变了军队的技术环境,改变了他们对技术研发的支持力度,让他们与设计师合作,最终,见到了军队技术的研发成果。”

原文:https://www.wired.com/story/pentagon-dream-team-tech-savvy-soldiers/ 

作者简介:Issie Lapowsky,WIRED 网站的资深作者,专注于时政领域。 

译者:安翔,责编:屠敏

640?wx_fmt=gif640?wx_fmt=gif

展开阅读全文

何在ffmpeg中使用滤镜技术

06-21

如何在ffmpeg中使用滤镜技术?rnrn我希望在ffmpeg中使用滤镜技术,在进行h.264编码之后,在进行滤镜处理,叠加字符,如何做啊?rn本人现在已经做了一部分工作,但是到最后配置滤镜的时候出错了,就是avfilter_graph_config函数不知道哪里有问题?总是返回-22,请高手指教!rnrn本人的qq:94643913,欢迎联系本人。rnrn以下是本人的部分代码:rn//解码一个avpacketrnstatic int get_video_frame(VideoState *is, AVFrame *frame, int64_t *pts, AVPacket *pkt)rnrn int got_picture, i; int ret = 1;rn //if (packet_queue_get(&is->videoq, pkt, 1) < 0)rn // return -1;rn if ((i = av_read_frame(is->ic, pkt)) < 0)//如果读到文件尾部就退出rn return 0;rnrn i=avcodec_decode_video2(is->video_st->codec, frame, &got_picture, pkt);rnrn if (got_picture==0) rn ;//return 0;rnrn *pts = frame->pkt_dts;rn if (*pts == AV_NOPTS_VALUE)rn *pts = 0;rnrn /*if (((is->av_sync_type == AV_SYNC_AUDIO_MASTER && is->audio_st) || rn is->av_sync_type == AV_SYNC_EXTERNAL_CLOCK) &&rn (framedrop>0 || (framedrop && is->audio_st))) rn rn //SDL_LockMutex(is->pictq_mutex);rn if (is->frame_last_pts != AV_NOPTS_VALUE && *pts) rn rn double clockdiff = get_video_clock(is) - get_master_clock(is);rn double dpts = av_q2d(is->video_st->time_base) * *pts;rn double ptsdiff = dpts - is->frame_last_pts;rnrn if (fabs(clockdiff) < AV_NOSYNC_THRESHOLD &&rn ptsdiff > 0 && ptsdiff < AV_NOSYNC_THRESHOLD &&rn clockdiff + ptsdiff - is->frame_last_filter_delay < 0) rn rn is->frame_last_dropped_pos = pkt->pos;rn is->frame_last_dropped_pts = dpts;rn is->frame_drops_early++;rn ret = 0;rn rn rn */rn if (ret)rn is->frame_last_returned_time = av_gettime() / 1000000.0;rnrn return ret;rnrnrnstatic int input_get_buffer(AVCodecContext *codec, AVFrame *pic)rnrn AVFilterContext *ctx =(AVFilterContext *) codec->opaque;rn AVFilterBufferRef *ref;rn int perms = AV_PERM_WRITE;rn int i, w, h, stride[AV_NUM_DATA_POINTERS];rn unsigned edge;rn int pixel_size;rnrn av_assert0(codec->flags & CODEC_FLAG_EMU_EDGE);rnrn if (codec->codec->capabilities & CODEC_CAP_NEG_LINESIZES)rn perms |= AV_PERM_NEG_LINESIZES;rnrn if (pic->buffer_hints & FF_BUFFER_HINTS_VALID) rn rn if (pic->buffer_hints & FF_BUFFER_HINTS_READABLE) perms |= AV_PERM_READ;rn if (pic->buffer_hints & FF_BUFFER_HINTS_PRESERVE) perms |= AV_PERM_PRESERVE;rn if (pic->buffer_hints & FF_BUFFER_HINTS_REUSABLE) perms |= AV_PERM_REUSE2;rn rn if (pic->reference) perms |= AV_PERM_READ | AV_PERM_PRESERVE;rnrn w = codec->width;rn h = codec->height;rnrn if(av_image_check_size(w, h, 0, codec) || codec->pix_fmt<0)rn return -1;rnrn avcodec_align_dimensions2(codec, &w, &h, stride);rn edge = codec->flags & CODEC_FLAG_EMU_EDGE ? 0 : avcodec_get_edge_width();rn w += edge << 1;rn h += edge << 1;rnrn if (codec->pix_fmt != ctx->outputs[0]->format) rn rn av_log(codec, AV_LOG_ERROR, "Pixel format mismatches %d %d\n", codec->pix_fmt, ctx->outputs[0]->format);rn return -1;rn rn if (!(ref = avfilter_get_video_buffer(ctx->outputs[0], perms, w, h)))rn return -1;rnrn //pixel_size = av_pix_fmt_descriptors[ref->format].comp[0].step_minus1 + 1;rn pixel_size = av_PixFmtDescriptors[ref->format].comp[0].step_minus1 + 1;rnrn ref->video->w = codec->width;rn ref->video->h = codec->height;rnrn for (i = 0; i < 4; i ++) rn rn //unsigned hshift =(i == 1 || i == 2) ? av_pix_fmt_descriptors[ref->format].log2_chroma_w : 0;rn //unsigned vshift =(i == 1 || i == 2) ? av_pix_fmt_descriptors[ref->format].log2_chroma_h : 0;rn unsigned hshift =(i == 1 || i == 2) ? av_PixFmtDescriptors[ref->format].log2_chroma_w : 0;rn unsigned vshift =(i == 1 || i == 2) ? av_PixFmtDescriptors[ref->format].log2_chroma_h : 0;rnrn pic->base[i] = ref->data[i];rn if (ref->data[i])rn ref->data[i] += ((edge * pixel_size) >> hshift) + ((edge * ref->linesize[i]) >> vshift);rn rn pic->data[i] = ref->data[i];rn pic->linesize[i] = ref->linesize[i];rn rn pic->opaque = ref;rn pic->type = FF_BUFFER_TYPE_USER;rn pic->reordered_opaque = codec->reordered_opaque;rn pic->width = codec->width;rn pic->height = codec->height;rn pic->format = codec->pix_fmt;rn pic->sample_aspect_ratio = codec->sample_aspect_ratio;rn if (codec->pkt) pic->pkt_pts = codec->pkt->pts;rn else pic->pkt_pts = AV_NOPTS_VALUE;rn return 0;rnrnrnstatic void input_release_buffer(AVCodecContext *codec, AVFrame *pic)rnrn memset(pic->data, 0, sizeof(pic->data));rn avfilter_unref_buffer((AVFilterBufferRef *)pic->opaque);rnrnrnstatic int input_reget_buffer(AVCodecContext *codec, AVFrame *pic)rnrn AVFilterBufferRef *ref =(AVFilterBufferRef *) pic->opaque;rnrn if (pic->data[0] == NULL) rn rn pic->buffer_hints |= FF_BUFFER_HINTS_READABLE;rn return codec->get_buffer(codec, pic);rn rnrn if ((codec->width != ref->video->w) || (codec->height != ref->video->h) ||rn (codec->pix_fmt != ref->format)) rn rn av_log(codec, AV_LOG_ERROR, "Picture properties changed.\n");rn return -1;rn rn pic->reordered_opaque = codec->reordered_opaque;rnrn if (codec->pkt) pic->pkt_pts = codec->pkt->pts;rn else pic->pkt_pts = AV_NOPTS_VALUE;rn return 0;rnrnrnstatic int input_init(AVFilterContext *ctx, const char *args, void *opaque)rnrn FilterPriv *priv =(FilterPriv *)ctx->priv;rn AVCodecContext *codec;rn if (!opaque) return -1;rnrn priv->is =(VideoState *) opaque;rn codec = priv->is->video_st->codec;rn codec->opaque = ctx;rnrn if (codec->codec->capabilities & CODEC_CAP_DR1) //解码能力rn rn //av_assert0(codec->flags & CODEC_FLAG_EMU_EDGE);rn priv->use_dr1 = 1;rn codec->get_buffer = input_get_buffer;rn codec->release_buffer = input_release_buffer;rn codec->reget_buffer = input_reget_buffer;rn codec->thread_safe_callbacks = 1;rn rn priv->frame = avcodec_alloc_frame();rn return 0;rnrnrnstatic void input_uninit(AVFilterContext *ctx)rnrn FilterPriv *priv =(FilterPriv *) ctx->priv;rn av_free(priv->frame);rnrnrnstatic int input_request_frame(AVFilterLink *link)rnrn FilterPriv *priv =(FilterPriv *) link->src->priv;rn AVFilterBufferRef *picref;rn int64_t pts = 0;rn AVPacket pkt;rn int ret;rnrn //循环,解码一个avpacketrn while (!(ret = get_video_frame(priv->is, priv->frame, &pts, &pkt)))rn av_free_packet(&pkt);rnrn if (ret < 0)rn return -1;rnrn if (priv->use_dr1 && priv->frame->opaque) rn rn picref = avfilter_ref_buffer((AVFilterBufferRef *)priv->frame->opaque, ~0);rn rn else rn rn picref = avfilter_get_video_buffer(link, AV_PERM_WRITE, priv->frame->width, priv->frame->height);rnrn av_image_copy(picref->data, picref->linesize,rn (const uint8_t **)(void **)priv->frame->data, priv->frame->linesize,rn (FFmpegPixFmt::PixelFormat)picref->format, priv->frame->width, priv->frame->height);rn rn av_free_packet(&pkt);rnrn avfilter_copy_frame_props(picref, priv->frame);rn picref->video->sample_aspect_ratio = av_guess_sample_aspect_ratio(priv->is->ic, priv->is->video_st, priv->frame);rn picref->pts = pts;rnrn avfilter_start_frame(link, picref);rn avfilter_draw_slice(link, 0, picref->video->h, 1);rn avfilter_end_frame(link);rn return 0;rnrnrnstatic int input_query_formats(AVFilterContext *ctx)rnrn FilterPriv *priv =(FilterPriv *) ctx->priv;rnrn enum FFmpegPixFmt::PixelFormat pix_fmts[] =(FFmpegPixFmt::PixelFormat)priv->is->video_st->codec->pix_fmt, PIX_FMT_NONE;rnrn avfilter_set_common_pixel_formats(ctx, avfilter_make_format_list((int *)pix_fmts));rn return 0;rnrnrnstatic int input_config_props(AVFilterLink *link)rnrn FilterPriv *priv =(FilterPriv *)link->src->priv;rn AVStream *s = priv->is->video_st;rnrn link->w = s->codec->width;rn link->h = s->codec->height;rn link->sample_aspect_ratio = s->sample_aspect_ratio.num ? s->sample_aspect_ratio : s->codec->sample_aspect_ratio;rn link->time_base = s->time_base;rnrn return 0;rnrnrnAVFilterPad inPad=NULL;rnrnAVFilterPad outPad="default",AVMEDIA_TYPE_VIDEO,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,rnNULL,input_request_frame,input_config_propsrn;rnrnstatic AVFilter input_filter=rnrn "ffplay_input",sizeof(FilterPriv),rn input_init,input_uninit,rn input_query_formats, &inPad, &outPad,"test zjr inputFilter"rn;rnrn//配置视频帧滤镜函数rnstatic int configure_video_filters(AVFilterGraph *graph, VideoState *is, const char *vfilters)rnrn static const enum FFmpegPixFmt::PixelFormat pix_fmts[]=PIX_FMT_YUV420P, PIX_FMT_NONE ;rn char sws_flags_str[128];rn int ret=0;rn char *pPixelFmt;rn AVBufferSinkParams *buffersink_params = av_buffersink_params_alloc();rn rn //定义三个滤镜上下文对象rn AVFilterContext *filt_src = NULL, *filt_out = NULL, *filt_format;;rnrn sprintf(sws_flags_str, "flags=%d", SWS_BICUBIC);rn graph->scale_sws_opts = av_strdup(sws_flags_str);rnrn //第一个参数是生成的filter(是一个source),rn //第二个参数是一个AVFilter结构的实例,此实例必须由调用者自己实现,才能将帧送到graph中.rn //第三个参数是要创建的fitler的名字,第四个 参数是不知道什么用,rn //第五个参数是user data(调用者的私有数据),第六个参数是graph的指针rn ret = avfilter_graph_create_filter(&filt_src, &input_filter, "src", NULL, is, graph);rnrn ret = avfilter_graph_create_filter(&filt_out, avfilter_get_by_name("buffersink"),rn "out", NULL, (char*)pix_fmts, graph);//rnrn av_freep(&buffersink_params);rnrn ret = avfilter_graph_create_filter(&filt_format, avfilter_get_by_name("format"),rn "format", "yuv420p", NULL, graph);rn rn if (ret < 0)rn return ret;rnrn //连接source和sinkrn //第一个参数是接在前面的filter,第二个参数是前fitler的要连接的pad的序号,第三个参数是后面的filter,rn //第四个参数是后filter的要连接的pad.rn if ((ret = avfilter_link(filt_format, 0, filt_out, 0)) < 0)rn return ret;rnrn if (vfilters) rn rn AVFilterInOut *outputs = avfilter_inout_alloc();rn AVFilterInOut *inputs = avfilter_inout_alloc();rnrn outputs->name = av_strdup("in");rn outputs->filter_ctx = filt_src;rn outputs->pad_idx = 0;rn outputs->next = NULL;rnrn inputs->name = av_strdup("out");rn inputs->filter_ctx = filt_format;rn inputs->pad_idx = 0;rn inputs->next = NULL;rnrn if ((ret = avfilter_graph_parse(graph, vfilters, &inputs, &outputs, NULL)) < 0)rn return ret;rn rn else rn rn if ((ret = avfilter_link(filt_src, 0, filt_format, 0)) < 0)rn return ret;rn rnrn //对graph做最后的检查rn ret = avfilter_graph_config(graph, NULL);rn if (ret< 0)rn ;//return ret;rnrn is->out_video_filter = filt_out;rnrn return ret;rn 论坛

[技术共享]如何在服务器中查询表所在的数据库名称

02-18

很久没上CSDN了,CSDN依旧还是那么的火,在此祝愿DN越办越好。见贴者均有分~rn今天来给大家出个题,顺便也把好久没写的SQL从新写一把rn题目:如何在服务器中查询表所在的数据库名称.rn已知表名,在服务器中的任意数据库中执行脚本可得出表所在的数据库名称。rnrn举例rn现在有数据库DB_A,表包含A1,A2,A3,A4,A10rn数据库DB_B,表包含A5,A6,A7,A8,A10rn在数据库DB_B中执行脚本 输入表名为A1 能够得知此表在数据库DB_A中 反之亦然。数据库中存在相同表名称,需要检索出所有数据库名称。rnrn楼主我自己先写一个奉上,希望有人能提供更好的解决方案~ 谢谢!rn[code=SQ]rnUSE [master]rnDECLARE @TableName VARCHAR(100);rnDECLARE @QueryString VARCHAR(MAX);rnrnSET @TableName = 'tables'rnrnSELECT @QueryString =REPLACE(REPLACE( rn (rnSELECT 'select name collate chinese_prc_ci_as as TableNAME,''' rn + dbName_Query.DATABASE_NAME rn + ''' AS DATABASE_NAME from ' rn + dbName_Query.DATABASE_NAME + rn '.dbo.sysobjects WHERE xtype = ''U'' union all ' AS DBQueryStringrnFROM (rn SELECT DATABASE_NAME = DB_NAME(s_mf.database_id)rn FROM sys.master_files s_mfrn WHERE s_mf.state = 0rn AND HAS_DBACCESS(DB_NAME(s_mf.database_id)) = 1 rn AND DB_NAME(s_mf.database_id) rn NOT IN('master','tempdb','model','msdb')rn GROUP BYrn s_mf.database_idrn ) AS dbName_Query FOR XML AUTOrn), '','')rnSET @QueryString = 'select * from ( ' + SUBSTRING(@QueryString,1,LEN(@QueryString)-10) + ') As Query where Query.TableNAME like ''%' + @TableName + '%'' ';rnPRINT @QueryStringrnEXEC(@QueryString)rn[/code] 论坛

没有更多推荐了,返回首页