如何找到包含<text>的存储过程?

本文提供在SQL Server中搜索含有特定字段名或变量名的存储过程的方法,包括使用syscomments、sys.objects等系统表进行精确匹配,以及推荐ApexSQL Search插件提升搜索效率。

本文翻译自:How do I find a stored procedure containing ?

我需要在SQL Server 2008中搜索包含数据库字段名称或变量名称的存储过程。


#1楼

参考:https://stackoom.com/question/ljoJ/如何找到包含-text-的存储过程


#2楼

In case you needed schema as well: 如果您还需要架构:

SELECT   DISTINCT SCHEMA_NAME(o.schema_id),o.name,[text]
FROM     syscomments AS c
         INNER JOIN sys.objects AS o ON c.id = o.[object_id]
         INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
WHERE    text LIKE '%foo%'
ORDER BY  SCHEMA_NAME(o.schema_id),o.name 

#3楼

You can also try ApexSQL Search - free SSMS plug-in from ApexSQL. 您还可以尝试从ApexSQL免费获得ApexSQL Search SSMS插件。

在此输入图像描述


#4楼

SELECT s.name + '.' + o.name ProcedureName
, c.text ProcedureSteps
FROM   sys.syscomments c 
INNER JOIN
sys.objects o 
ON 
c.id = o.object_id
INNER JOIN
sys.schemas s 
ON 
o.schema_id = s.schema_id
WHERE  o.type = 'P'
AND c.text LIKE N'%XXXX%'
ORDER BY s.name + '.' + o.name
, c.colid

This query returns the name and the content of any stored procedure where "XXXX" is is referenced within the stored procedure. 此查询返回存储过程中引用“XXXX”的任何存储过程的名称和内容。

This is quit usefull when finding procedures that reference a specific table/view/procedure 在查找引用特定表/视图/过程的过程时,这是有用的


#5楼

select * from sys.system_objects
where name like '%cdc%'

#6楼

SELECT * FROM sys.procedures WHERE Name LIKE '%CompanySpecialisation%'

这是我在SQL 2012中编写的选择所有存储过程的地方,例如“CompanySpecialisation”这样的名称

<think>好的,我现在需要帮助用户解决如何在Web界面显示多个WiFi配置,并确保静态IP设置功能与手机一致的问题。用户还提供了一段HTML代码片段,其中包含多个表格行,每个行对应不同的WiFi参数,比如MAC地址、IP地址、子网掩码等。用户希望当在“保存的网络”中选择一个配置时,其他字段能显示该配置的信息,当写入新配置时,如果AP_SSID和网络的SSID不匹配,则视为新配置。 首先,我需要理解用户的需求。用户希望Web界面能够展示多个已保存的WiFi配置,并且每个配置的详细信息(如IP地址、网关等)能够在选择时动态显示。同时,当用户添加新配置时,系统需要判断该配置是否已经存在,如果不存在则作为新条目保存。此外,静态IP的设置需要与安卓手机的行为一致,即每个WiFi网络的配置是独立的,并且切换网络时应用对应的设置。 接下来,我需要考虑如何将用户提供的HTML代码整合到解决方案中。用户提供的表格中使用了占位符(如<!--#WIFI_SSID-->),这些可能是服务器端的变量,需要替换为实际的数据。此外,用户提到当选择“保存的网络”时,其他字段需要更新,这可能需要前端JavaScript来处理事件和动态更新页面内容。 然后,我需要设计数据结构来存储多个WiFi配置。每个配置应包含SSID、密码、IP设置(DHCP或静态IP参数)、MAC地址、BSSID等信息。可能需要一个数组或对象来管理这些配置,并在前端进行渲染。 对于动态显示配置信息,当用户从“保存的网络”列表中选择一个SSID时,前端需要找到对应的配置对象,并将各个字段的值填充到页面的相应位置。这可能需要事件监听器,比如当选择框发生变化时,触发更新函数。 关于添加新配置的逻辑,用户提到当AP_SSID与现有网络的SSID都不匹配时,视为新配置。因此,在保存时需要检查现有的配置列表中是否存在相同的SSID。如果不存在,则创建新条目;如果存在,则更新现有条目。这需要遍历现有配置数组进行比对。 另外,需要处理静态IP和DHCP的切换。当用户选择DHCP时,IP地址、子网掩码、网关等字段可能需要禁用,并自动获取值;而选择静态IP时,这些字段变为可编辑状态,并需要验证输入的合法性。 还需要考虑数据的持久化存储。用户可能希望配置在页面刷新后仍然存在,因此需要将配置存储在localStorage或发送到服务器保存。但根据用户提供的代码中的变量,可能服务器端已经处理存储,前端需要通过AJAX请求与后端交互。 在实现过程中,需要注意以下几点: 1. 如何将用户提供的HTML结构与动态数据绑定结合起来,可能需要使用前端框架如Vue.js或React,或者原生JavaScript操作DOM。 2. 事件处理,如选择网络时的change事件,保存按钮的click事件。 3. 数据验证,特别是IP地址、子网掩码等格式的正确性检查。 4. 确保新增配置时的唯一性判断逻辑正确,避免重复条目。 5. 界面更新的实时性,选择不同网络时字段信息立即更新。 现在,我需要将这些思考转化为具体的代码示例和步骤说明,确保用户能够理解并实现。可能需要提供HTML结构、JavaScript逻辑处理(包括事件监听、数据操作)、以及简单的后端交互示例(如果需要)。 同时,用户可能希望代码尽量简洁,使用原生JavaScript而不是框架,以便兼容性和易用性。因此,示例代码可能使用原生JS来实现动态更新和事件处理。 最后,需要验证解决方案是否符合用户需求:显示多个配置,动态加载信息,正确添加新配置,并确保静态IP设置功能与手机一致。</think>要实现类似安卓手机的WiFi多配置管理Web界面,需结合动态DOM操作与数据绑定逻辑。以下是完整实现方案: ```html <!-- WiFi配置管理界面 --> <div class="wifi-container"> <!-- 保存的网络列表 --> <select id="networkList" onchange="loadNetworkConfig()"> <!-- 动态填充选项 --> </select> <!-- 配置详情表单 --> <table id="configTable"> <tr><td>MAC address</td><td id="WIFI_MAC"></td></tr> <tr><td>DHCP</td><td id="WIFI_DHCP"> <select onchange="toggleIPFields(this.value)"> <option value="1">启用</option> <option value="0">禁用</option> </select> </td></tr> <tr><td>IP address</td><td id="WIFI_IP"><input type="text" id="ipAddress" disabled></td></tr> <tr><td>Subnet mask</td><td id="WIFI_MSK"><input type="text" id="subnetMask" disabled></td></tr> <tr><td>Default gateway</td><td id="WIFI_GW"><input type="text" id="gateway" disabled></td></tr> <tr><td>DNS Server1</td><td id="WIFI_DNS1"><input type="text" id="dns1" disabled></td></tr> <tr><td>DNS Server2</td><td id="WIFI_DNS2"><input type="text" id="dns2" disabled></td></tr> <tr><td>AP_BSSID</td><td id="WIFI_BSSID"></td></tr> <tr><td>AP_SSID</td><td id="WIFI_SSID"></td></tr> <tr><td>AP_PASSWORD</td><td id="WIFI_PASSWORD"></td></tr> </table> <button onclick="saveConfiguration()">保存配置</button> </div> ``` ```javascript // 全局配置存储 let wifiNetworks = []; // 初始化网络列表 function initNetworkList() { const select = document.getElementById('networkList'); select.innerHTML = wifiNetworks.map(net => `<option value="${net.ssid}">${net.ssid}</option>` ).join(''); } // 加载选中网络配置 function loadNetworkConfig() { const ssid = document.getElementById('networkList').value; const config = wifiNetworks.find(net => net.ssid === ssid); // 更新MAC地址等只读字段 document.getElementById('WIFI_MAC').textContent = config.mac || 'N/A'; document.getElementById('WIFI_BSSID').textContent = config.bssid || 'N/A'; document.getElementById('WIFI_SSID').textContent = config.ssid; document.getElementById('WIFI_PASSWORD').textContent = config.password || '••••••'; // 设置DHCP状态 const dhcpSelect = document.querySelector('#WIFI_DHCP select'); dhcpSelect.value = config.dhcp ? "1" : "0"; toggleIPFields(dhcpSelect.value); // 填充IP字段 if (!config.dhcp) { document.getElementById('ipAddress').value = config.ip || ''; document.getElementById('subnetMask').value = config.mask || ''; document.getElementById('gateway').value = config.gateway || ''; document.getElementById('dns1').value = config.dns1 || ''; document.getElementById('dns2').value = config.dns2 || ''; } } // 切换IP字段状态 function toggleIPFields(dhcpEnabled) { const fields = ['ipAddress', 'subnetMask', 'gateway', 'dns1', 'dns2']; fields.forEach(id => { document.getElementById(id).disabled = dhcpEnabled === "1"; }); } // 保存配置逻辑 function saveConfiguration() { const ssid = document.getElementById('networkList').value; const config = wifiNetworks.find(net => net.ssid === ssid); // 更新IP配置 config.dhcp = (document.querySelector('#WIFI_DHCP select').value === "1"); if (!config.dhcp) { config.ip = document.getElementById('ipAddress').value; config.mask = document.getElementById('subnetMask').value; config.gateway = document.getElementById('gateway').value; config.dns1 = document.getElementById('dns1').value; config.dns2 = document.getElementById('dns2').value; } // 持久化存储(示例) fetch('/api/save-config', { method: 'POST', body: JSON.stringify(config) }).then(() => alert('配置已保存')); } // 添加新网络逻辑 function addNewNetwork(ssid, password) { if (!wifiNetworks.some(net => net.ssid === ssid)) { wifiNetworks.push({ ssid: ssid, password: password, mac: generateMAC(), dhcp: true, // 其他默认字段... }); initNetworkList(); } } // 初始化示例数据 function initDemoData() { wifiNetworks = [ { ssid: "HomeWiFi", password: "home1234", mac: "00:1A:2B:3C:4D:5E", dhcp: false, ip: "192.168.1.100", mask: "255.255.255.0", gateway: "192.168.1.1", dns1: "8.8.8.8" }, { ssid: "OfficeWiFi", password: "office5678", mac: "00:1B:44:11:3A:B7", dhcp: true } ]; initNetworkList(); loadNetworkConfig(); } ``` **核心功能实现说明:** 1. **动态数据绑定机制** - 通过`wifiNetworks`数组集中管理所有配置 - 使用`loadNetworkConfig()`实现选中项与表单字段的双向绑定 - `initNetworkList()`负责同步下拉列表与数据源 2. **IP字段状态管理** - `toggleIPFields()`根据DHCP状态切换输入框可用状态 - 输入字段初始为禁用状态,DHCP关闭时才可编辑 3. **新增网络检测逻辑** ```javascript function isNewNetwork(ssid) { return !wifiNetworks.some(net => net.ssid === ssid); } ``` 4. **数据验证增强(示例)** ```javascript function validateIP(ip) { const ipPattern = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; return ipPattern.test(ip); } function validateForm() { if (!validateIP(document.getElementById('ipAddress').value)) { alert('IP地址格式错误!'); return false; } // 其他验证逻辑... return true; } ``` 5. **持久化存储方案** - 本地开发可使用localStorage: ```javascript function saveToLocal() { localStorage.setItem('wifiConfigs', JSON.stringify(wifiNetworks)); } function loadFromLocal() { const saved = localStorage.getItem('wifiConfigs'); if (saved) wifiNetworks = JSON.parse(saved); } ``` **扩展功能建议:** 1. 增加配置导出/导入功能 2. 实现网络连通性测试(ping网关) 3. 添加MAC地址过滤验证 4. 支持二维码生成/扫描配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值