我试图用以下代码做的是让它获取所有数据库名称,然后循环遍历这些数据库检查表tblAdminLogin
是否存在以及是否更新用户名的密码'富'
到目前为止,我一直在使用 select 语句而不是更新,直到它正常工作为止。
declare @databases table
(
PK int IDENTITY(1,1),
dbid int,
name varchar(50)
)
insert into @databases(dbid, name) select dbid, name from master.dbo.sysdatabases
Declare @maxPK int; select @maxPK = MAX(PK) from @databases
Declare @pk int; Set @pk = 1
Declare @name varchar(50)
While @pk <= @maxPK
Begin
Select @name = name from @databases where PK=@pk
if OBJECT_ID(''+@name+'.dbo.tblAdminLogin') IS NOT NULL
Begin
Select password from @name.dbo.tblAdminLogin where username = 'foo'
--Update @name.dbo.tblAdminLogin Set password='bar' where username = 'foo'
End
Set @pk = @pk + 1
End
有问题的主要代码是
Select @name = name from @databases where PK=@pk
if OBJECT_ID(''+@name+'.dbo.tblAdminLogin') IS NOT NULL
Begin
Select password from @name.dbo.tblAdminLogin where username = 'foo'
--Update @name.dbo.tblAdminLogin Set password='bar' where username = 'foo'
End
编辑:由于我使用 SQL Server,因此在标题中添加了 T-SQL
编辑:修复了拼写错误.dbl。到正确的.dbo。
最佳答案
动态 SQL。
未经测试
declare @SQL varchar(max) -- varchar(8000) if on SQL Server 2000 or earlier
While @pk <= @maxPK
Begin
Select @name = name from @databases where PK=@pk
if OBJECT_ID(''+@name+'.dbo.tblAdminLogin') IS NOT NULL
Begin
set @SQL = 'update ' + quotename(@name) + '.dbo.tblAdminLogin Set password=''bar'' where username = ''foo'''
exec (@SQL)
End
set @PK = @PK + 1
End
引用文献:
编辑:关于类型的一般注释,OP 没有要求:
数据库名称的类型为 SYSNAME,我上次检查时它相当于 NVARCHAR(128)。将该值存储在 VARCHAR 类型中可能会丢失信息。在某些网站上,由于他们选择的名称,机会很小,但仍然有机会。
declare @databases table
(
PK int IDENTITY(1,1),
dbid int,
name sysname
)
insert into @databases(dbid, name) select dbid, name from master.dbo.sysdatabases
Declare @maxPK int; select @maxPK = MAX(PK) from @databases
Declare @pk int; Set @pk = 1
Declare @name sysname -- so that
declare @SQL nvarchar(4000)
While @pk <= @maxPK
Begin
Select @name = name from @databases where PK=@pk
if OBJECT_ID(@name+N'.dbo.tblAdminLogin') IS NOT NULL
Begin
set @SQL = N'update ' + quotename(@name) + N'.dbo.tblAdminLogin Set password=''bar'' where username = ''foo'''
exec (@SQL)
End
set @PK = @PK + 1
End
关于sql-server - 如何在 if OBJECT_ID 中使用 T-SQL 变量来检查表是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6233416/