【发布时间】:2016-03-25 22:52:33
【问题描述】:
环境:SQL Server 2005/2008, 发布数据库
我已使用 information_schema 表将一组数据插入到表变量中,如下所示。
现在我想根据 dSQL 列中执行查询的结果更新标志列。我能够使用循环/光标进行更新,然后使用 sp_executeSQL 来 更新列,然后更新标志列。但是是否有另一种基于集合的方法来不循环遍历所有单独的行?
use pubs
go
declare @dsql Nvarchar(max)='', @tablename varchar(100), @colname varchar(100)
declare @t table (
TABLE_NAME varchar(100),
COLUMN_NAME varchar(100)
)
insert into @t
select distinct t.TABLE_NAME, c.COLUMN_NAME
from information_Schema.tables t
inner join
information_Schema.columns c
on t.TABLE_CATALOG = c.TABLE_CATALOG
where t.TABLE_SCHEMA = c.TABLE_SCHEMA
and t.TABLE_TYPE = 'BASE TABLE'
and c.DATA_TYPE = 'varchar'
select *, Dsql = 'select ' + COLUMN_NAME + ' from ' + TABLE_NAME + ' WHERE '
+ COLUMN_NAME + ' = ''Menlo Park''', '' as Flag
FROM @t
GO
我想创建一个函数并为每一行调用该函数以执行单独的查询语句,但为每条记录调用该函数可能会影响性能。
【问题讨论】:
标签: sql sql-server tsql