这样的事情可能吗?:
DECLARE @test nvarchar(30) = 'Appt'
SELECT * FROM @test.dbo.tablename with (NOLOCK)
或可能
DECLARE @test nvarchar(30) = 'Appt'
SELECT * FROM @test + '.dbo.tablename' with (NOLOCK)
不,对吧?
我不希望将整个字符串放入变量中,然后使用" EXEC。"我有很长的脚本,我想尝试用它来替换它。
谢谢。
答案 0 :(得分:1)
这需要动态SQL。基本上,您创建一个字符串,根据您的查询动态构建SQL语句。然后使用EXEC语句执行该字符串。一个基本的例子是这样的:
DECLARE @test nvarchar(30) = 'Appt'
DECLARE @sql as varchar(max)
SET @SQL = 'SELECT * FROM' + @test + '.dbo.tablename' + 'with (NOLOCK)'
EXEC @SQL
假设您的表名为Appt.dbo.tablename
我认为你的意思是:
SET @SQL = 'SELECT * FROM' + 'dbo.' + @test + ' with (NOLOCK)'
答案 1 :(得分:1)
很好的解释logixologist。
因为Tom想要为多个select语句运行它,我认为他可以将所有表名存储在一列中并使用游标来获取表值。考虑到您将首先创建一个表,例如:
CREATE TABLE tableName ( name varchar(20));
然后在上表中插入正确的值后运行以下代码。
Declare @table VARCHAR(255)
DECLARE @sql as varchar(max)
SET @SQL = 'SELECT * FROM' + 'dbo.' + @table + ' with (NOLOCK)'
DECLARE table_cursor CURSOR FOR
select distinct([name]) FROM DBname.dbo.tableName
Where [name] is not null
OPEN table_cursor
FETCH Next from table_cursor
INTO @table
WHILE @@FETCH_STATUS =0
BEGIN
EXEC @SQL
FETCH NEXT FROM table_cursor
INTO @table
END
CLOSE table_cursor
DEALLOCATE table_cursor
游标将返回select语句的表名。我认为你可以对插入语句使用相同的逻辑。