我想接收存储过程中提交的表名的所有表信息。
例如这样的事情:
create proc selectUserTable
@username nvarchar(30)
as
begin
select * from @username
end
当然这行不通,但是我怎样才能做出这样的东西呢?
如果我这样做:
create proc selectUserTable
@username nvarchar(30)
as
begin
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE '@username'
end
它只会返回表名,而不返回其中的信息。
最佳答案
需要动态查询,但要注意sql注入(inject):
create proc selectUserTable
@username nvarchar(30)
as
begin
Exec('select * from ' + @username)
end
如果@tablename = '用户; drop table users;',你就会有麻烦了。 最好先通过 tablename 变量获取 objectid,然后再次通过 objectid 获取 objectname 并将其传递给 exec 函数,而不是直接传递 tablename 变量。
关于Sql根据用户名返回表信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30013303/