我正在尋找MSSQL數據庫中不需要的控制字符。在SQL Server數據庫中搜索控制字符
我目前使用的存儲過程是根據我需要搜索的數據庫創建的,但這隻在搜索簡單字符或字符串時才起作用。見下面的步驟,因爲它代表(這是第一次從這個網站上收集)
CREATE PROC SearchAllTables
(
@SearchStr nvarchar(100)
)
AS
BEGIN
-- Creates a Stored Procedure for the database
-- When running the procedure, set the @SearchStr parameter to the character you are searching for
CREATE TABLE #Results (ColumnName nvarchar(370), ColumnValue nvarchar(3630))
SET NOCOUNT ON
DECLARE @TableName nvarchar(256), @ColumnName nvarchar(128), @SearchStr2 nvarchar(110)
SET @TableName = ''
SET @SearchStr2 = QUOTENAME('%' + @SearchStr + '%','''')
WHILE @TableName IS NOT NULL
BEGIN
SET @ColumnName = ''
SET @TableName =
(
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @TableName
AND OBJECTPROPERTY(
OBJECT_ID(
QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)
), 'IsMSShipped'
) = 0
)
WHILE (@TableName IS NOT NULL) AND (@ColumnName IS NOT NULL)
BEGIN
SET @ColumnName =
(
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@TableName, 2)
AND TABLE_NAME = PARSENAME(@TableName, 1)
AND DATA_TYPE IN ('char', 'varchar', 'nchar', 'nvarchar')
AND QUOTENAME(COLUMN_NAME) > @ColumnName
)
IF @ColumnName IS NOT NULL
BEGIN
INSERT INTO #Results
EXEC
(
'SELECT ''' + @TableName + '.' + @ColumnName + ''', LEFT(' + @ColumnName + ', 3630)
FROM ' + @TableName + ' (NOLOCK) ' +
' WHERE ' + @ColumnName + ' LIKE ' + @SearchStr2
)
END
END
END
SELECT ColumnName, ColumnValue FROM #Results
END
現在,我需要改變這讓我搜索的控制字符列表:
'%['
+ CHAR(0)+CHAR(1)+CHAR(2)+CHAR(3)+CHAR(4)
+ CHAR(5)+CHAR(6)+CHAR(7)+CHAR(8)+CHAR(9)
+ CHAR(10)+CHAR(11)+CHAR(12)+CHAR(13)+CHAR(14)
+ CHAR(15)+CHAR(16)+CHAR(17)+CHAR(18)+CHAR(19)
+ CHAR(20)+CHAR(21)+CHAR(22)+CHAR(23)+CHAR(24)
+ CHAR(25)+CHAR(26)+CHAR(27)+CHAR(28)+CHAR(29)
+ CHAR(30)+CHAR(31)+CHAR(127)
+ ']%',
現在的程序不允許我將它用作搜索字符串,即使使用單個控制字符也不會正確搜索,例如CHAR(28)
USE [DBNAME]
GO
DECLARE @return_value int
EXEC @return_value = [dbo].[SearchAllTables]
@SearchStr = N'CHAR (28)'
SELECT 'Return Value' = @return_value
GO
從@SearchStr卸下N''
在上面的例子中的錯誤信息的結果:
附近有語法錯誤28'
任何人都可以用幫助一種適應此過程的方法,以允許搜索控制字符?
我很困惑你試圖完成什麼。您希望防止或需要來自對象名稱和列名稱的控制字符?爲什麼你的代碼如此複雜?你所關心的是檢查給予表和列的名稱 –
我試圖在給定數據庫的任何行中查找控制字符。頂部的過程旨在搜索數據庫的每個表中的一個或多個字符。 – KEW
再次在原理圖或每列的實際值?後者是一種完全不同的方法 –