Sql根据用户名返回表信息

标签 sql sql-server t-sql

我想接收存储过程中提交的表名的所有表信息。

例如这样的事情:

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/

相关文章:

mysql - LIKE 运算符 MySQL 不起作用

mysql - 从函数返回两个结果

sql - SUM()、GROUP BY 和 WHERE

t-sql - 返回自连接表上的父/子关系

php - 从具有 20 条或更多消息的各个 ip 选择所有消息

java - 如何从cmd使用java -D连接到SQL服务器

sql-server - 使用Gradle构建ssis和ssrs软件包

SQL 计数。当其他两列匹配时,如何计算表中有多少个不同值?

python - 没有名为 sql_server.pyodbc.base 的模块

sql - 在 t-sql 中查找匹配模式后的子字符串