我正在处理一个查询,该查询构建了sys.database
主表中的表名列表。然后我在concat语句中使用这些名称来获取每个数据库中的信息。我正在通过while循环运行整个事情来打击所有表,带有一个计数器。
即。
set @sql = 'select top 10 * from ' + (select dbname from @table where tabid = @i + '.dbo.**tablename** where NAME = '**String Value**'
当我print
@sql
的结果时,它给了我正确的语法,并且我能够毫无问题地运行命令。
当我将@sql
设置为exec
时,我收到错误
“ dbname 中的数据库选择前10 *不存在。”
就像执行忽略了select之后的所有内容。
答案 0 :(得分:0)
我怀疑你错误地打电话给EXEC。
使用T-SQL查询调用'exec'时,请务必将目标字符串括在括号中,例如
DECLARE @FOO VARCHAR(100)
Set @FOO = 'SELECT TOP 5 * from SOMETABLE'
EXEC (@FOO) -- not EXEC @FOO