小编Che*_*eon的帖子

在 SQL Server 中的表、存储过程和视图中查找文本

我可以在视图和存储过程中搜索特定文本,但无法同时搜索表。

这是我所拥有的:

DECLARE @cmd           VARCHAR(1000),
        @search_string VARCHAR(200)

CREATE TABLE #temp
(
    [Database_Name]     sysname,
    [Schema_Name]       sysname,
    [Object_Name]       sysname,
    [Object_Type]       nvarchar(60) 
)

-- Set the search string
SET @search_string = 'text'

SET @cmd = 'INSERT INTO #temp SELECT DISTINCT ''?'', s.name AS Schema_Name, o.name AS Object_Name, o.type_desc FROM [?].sys.sql_modules m INNER JOIN [?].sys.objects o ON m.object_id = o.object_id INNER JOIN [?].sys.schemas s ON o.schema_id = s.schema_id WHERE m.definition Like ''%' + @search_string + '%'''

-- Uncomment the following if you have problems …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

5
推荐指数
1
解决办法
1万
查看次数

使用列中最长数据的长度设置子字符串长度

我正在做一个子字符串来获取与某个费用代码匹配的所有电子邮件地址.由于我事先并不知道最大长度是什么,所以我总是使用太大的int,我想知道它是否会影响查询的性能.

我需要的是获取具有最长EmployeeEmails数据的行的长度并使用它设置@MAXINT

DECLARE @MAXINT INT = 2147483646

SELECT 
JOB.JOBNUMBER AS ExpenseCode,
substring(
    (
        Select ',' + LOWER(EMP.ELECTRONICMAILADDRESS) AS [text()]
        From dbo.EMPLOYEE EMP 
            INNER JOIN ITEM on ITEM.ACCESSLEVELNAME = JOB.ACCESSLEVELNAME
        Where LOWER(EMP.NAME2 + '.' + EMP.NAME3) Collate SQL_Latin1_General_CP1253_CI_AI = ITEM.NAMEOFUSER
            AND GETDATE() < CASE WHEN EMP.DATEENDEMPLOYMENT = '' THEN '2099-01-01' ELSE EMP.DATEENDEMPLOYMENT END
        ORDER BY EMP.ROWID
        For XML PATH ('')
    ), 2, @MAXINT) EmployeeEmails
FROM JOB
ORDER BY JOB.JOBNUMBER
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server

3
推荐指数
1
解决办法
65
查看次数

标签 统计

sql ×2

sql-server ×2

t-sql ×2