想得到所有包含tAscPrmUser表的数据库:
sp_MSforeachdb
'if object_id("tAscPrmUser","u") is not null
print "?"'
可总是调用当前数据库的object_id函数。 怎么调用指定数据库的object_id。
难道必须用select 1 from ?.sys.tables或 select 1 from ?.sysobjects还有一个问题:
还有怎么将得到的数据库名称放到一个变量或者一个表中?
declare @dbname nvarchar(100)
exec sp_MSforeachdb 'if object_id("tAscPrmUser","u") is not null set @dbname = @dbname + "?"'
print @dbname
但是sp_MSforeachdb 的参数一并不能访问外部变量
sp_MSforeachdb
'if object_id("tAscPrmUser","u") is not null
print "?"'
可总是调用当前数据库的object_id函数。 怎么调用指定数据库的object_id。
难道必须用select 1 from ?.sys.tables或 select 1 from ?.sysobjects还有一个问题:
还有怎么将得到的数据库名称放到一个变量或者一个表中?
declare @dbname nvarchar(100)
exec sp_MSforeachdb 'if object_id("tAscPrmUser","u") is not null set @dbname = @dbname + "?"'
print @dbname
但是sp_MSforeachdb 的参数一并不能访问外部变量
go
if object_id....
'use ?
if object_id("tAscPrmUser","u") is not null
print "?"'
那第二个问题呢?
动态语句
用sp_executesql输出参数
declare @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls) --如何将exec执行结果放入变量中? declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
select @num
go
CREATE TABLE t(a VARCHAR(200))
go
exec sp_msforeachdb 'use ? if object_id(''表'') is not null insert test.dbo.t select ''?'''
go
SELECT * FROM t
go
sp_MSforeachdb 'use ? if object_id("tAscPrmUser","u") is not null
insert into tempdb.dbo.# select "?"
'
declare @dbname nvarchar(2000)
select @dbname=isnull(@dbname+',','')+dbname from tempdb.dbo.#
select @dbname
drop table tempdb.dbo.#
if object_id('tempdb.dbo.#','U') is not null drop table #
go
create table tempdb.dbo.#(dbname varchar(200))
go
sp_MSforeachdb 'use ? if object_id("tAscPrmUser","u") is not null
insert into tempdb.dbo.# select "?"
'
declare @dbname nvarchar(2000)
select @dbname=isnull(@dbname+',','')+dbname from tempdb.dbo.#
select @dbname
就按你的方法,在tempdb里面建表,可惜没分了