nsi*_*lva 25 sql sql-server select sql-server-2008
使用SQL Server 2008,假设我有一个名为testing80列的表,我想找到一个名为的值foo.
我可以:
SELECT *
FROM testing
WHERE COLNAME = 'foo'
Run Code Online (Sandbox Code Playgroud)
是否有可能我可以查询所有80列并返回foo包含在80列中任何一列中的所有结果?
提前致谢.
Gor*_*off 25
你可以使用in:
SELECT *
FROM testing
WHERE 'foo' in (col1, col2, col3, . . . );
Run Code Online (Sandbox Code Playgroud)
第一种方法(经过测试)
首先获取用逗号分隔的字符串变量中的列列表,然后使用该变量搜索"foo"IN
检查下面首先获取列的存储过程,然后搜索字符串:
DECLARE @TABLE_NAME VARCHAR(128)
DECLARE @SCHEMA_NAME VARCHAR(128)
-----------------------------------------------------------------------
-- Set up the name of the table here :
SET @TABLE_NAME = 'testing'
-- Set up the name of the schema here, or just leave set to 'dbo' :
SET @SCHEMA_NAME = 'dbo'
-----------------------------------------------------------------------
DECLARE @vvc_ColumnName VARCHAR(128)
DECLARE @vvc_ColumnList VARCHAR(MAX)
IF @SCHEMA_NAME =''
BEGIN
PRINT 'Error : No schema defined!'
RETURN
END
IF NOT EXISTS (SELECT * FROM sys.tables T JOIN sys.schemas S
ON T.schema_id=S.schema_id
WHERE T.Name=@TABLE_NAME AND S.name=@SCHEMA_NAME)
BEGIN
PRINT 'Error : The table '''+@TABLE_NAME+''' in schema '''+
@SCHEMA_NAME+''' does not exist in this database!'
RETURN
END
DECLARE TableCursor CURSOR FAST_FORWARD FOR
SELECT CASE WHEN PATINDEX('% %',C.name) > 0
THEN '['+ C.name +']'
ELSE C.name
END
FROM sys.columns C
JOIN sys.tables T
ON C.object_id = T.object_id
JOIN sys.schemas S
ON S.schema_id = T.schema_id
WHERE T.name = @TABLE_NAME
AND S.name = @SCHEMA_NAME
ORDER BY column_id
SET @vvc_ColumnList=''
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @vvc_ColumnName
WHILE @@FETCH_STATUS=0
BEGIN
SET @vvc_ColumnList = @vvc_ColumnList + @vvc_ColumnName
-- get the details of the next column
FETCH NEXT FROM TableCursor INTO @vvc_ColumnName
-- add a comma if we are not at the end of the row
IF @@FETCH_STATUS=0
SET @vvc_ColumnList = @vvc_ColumnList + ','
END
CLOSE TableCursor
DEALLOCATE TableCursor
-- Now search for `foo`
SELECT *
FROM testing
WHERE 'foo' in (@vvc_ColumnList );
Run Code Online (Sandbox Code Playgroud)
第二种方法 在sql server中,你可以得到表的对象id,然后使用你可以获取列的对象id.在这种情况下,它将如下:
第1步:首先获取表的Object Id
select * from sys.tables order by name
Run Code Online (Sandbox Code Playgroud)
第2步:现在获取表格的列并在其中搜索:
select * from testing where 'foo' in (select name from sys.columns where object_id =1977058079)
Run Code Online (Sandbox Code Playgroud)
注意:object_id是您在相关表的第一步中获取的内容
| 归档时间: |
|
| 查看次数: |
49854 次 |
| 最近记录: |