我试图选择所有没有名为"unique"的列的表.我可以选择使用它的所有表:
SELECT DISTINCT TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = 'unique'
AND TABLE_SCHEMA ='database';
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法来修改SELECT语句,以便列出所有没有该列的表?这看起来很简单,但我无法弄明白,也无法在论坛上找到答案.
谢谢
是否有一条SQL命令,通过该命令我只能显示用户创建的表,而不能显示MySQL数据库中默认存在的表?
这听起来像是一个疯狂的请求.我报告的数据库没有任何外键,每个主键都是identity_column.这使得使用诸如TOAD之类的工具变得困难,因为Intellisense通过读取PK和FK关系来工作.
任何人都有一个脚本从数据库中的每个表中删除主键,所以我可以用"正确的"PK替换它们并添加FK以协助报告?
要忘掉"不要做!!!"的意思 回复,让我明确表示我不会对我的生产数据库执行此操作,而是将其复制到另一台服务器上.
任何意见,将不胜感激.
-------编辑使用正确的信息更新.----------------
谢谢你们,但我意识到我犯了一个错误.几乎每个表都有一个具有身份属性的"identity_column".该身份是聚集索引.但是,它未被指定为主键.
首先,主键和聚簇索引之间有什么区别?
其次,如何编写所有聚簇索引的脚本?这会有用吗?
SELECT
'ALTER TABLE ' + OBJECT_NAME(OBJECT_ID) + ' DROP CONSTRAINT ' + name
FROM sys.indexes WHERE type_desc = 'CLUSTERED'
Run Code Online (Sandbox Code Playgroud)
谢谢你的耐心
有没有办法在information_schema-objects上授予读访问权限,在本例中是views-table?
我想用非常有限的用户运行我的Web应用程序,但在某些地方他需要查询information_schema.views以进行调试.我想只允许拥有超级用户权限的用户这样做,或者还有其他方法吗?不喜欢以最大用户授权运行我的网络应用程序...
我想我几乎看到了与这个问题相关的每一页,最可能的答案是 检查SQL表是否存在 但是并不是真的理解它.这就是我得到的:
private void select_btn_Click(object sender, EventArgs e)
{
string theDate = dateTimePicker1.Value.ToString("dd-MM-yyyy");
SqlConnection SC = new SqlConnection("Data Source=ruudpc;Initial Catalog=leden;Integrated Security=True");
SqlCommand DateCheck = new SqlCommand("SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '" + theDate + "'");
}
Run Code Online (Sandbox Code Playgroud)
现在我想要DateCheck.ExecuteScalar()的返回值; 这可以告诉我它是否存在,可能很简单.
编辑
无论是sql注入部分,对于某些人来说这个问题是有帮助的,通常不好的做法是动态创建表,我建议你重新考虑你的ERD.只是说.
我想在SQL Server中找到包含两个特定单独列的所有表.
第一列名称是"LIKE'%A%'"(意思是它包含子字符串"A"),第二列名称是"LIKE'%B%'"(意思是它包含子字符串"B").
我写了以下查询,我想检查它的正确性:
SELECT s.TABLE_NAME
FROM (SELECT COLUMN_NAME, TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%A%'
UNION
SELECT COLUMN_NAME, TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%B%') s
WHERE EXISTS (SELECT COLUMN_NAME, s.TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%A%')
AND EXISTS (SELECT COLUMN_NAME, s.TABLE_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%B%');
Run Code Online (Sandbox Code Playgroud) 在我的数据库中有许多文本列,其中值是空字符串 ( '')。空字符串需要设置为NULL. 我不知道这个数据库中的确切模式、表和列,或者我想编写一个可以重用的通用解决方案。
我将如何编写查询/函数来查找所有模式中所有表中的所有文本列,并将所有带有空字符串 ( '') 的列更新为NULL?
介绍
我一直在开发一个向导,为没有任何编程/SQL 背景的用户创建复杂的数据库 Postgres 查询。由于存储在 information_schema 视图中的外键约束,用户可以选择任意数量的表,并且该工具将找到正确的联接设置(因此,用户不必添加ON table_a.field_1 = table_b.field_2)。
在开发过程中,我一直使用管理数据库用户,现在想将其更改为只读用户以使其更安全。但是,这个只读用户似乎无法访问外键约束。
现在的情况
当选择了多个表时,该工具会尝试获取各个表之间的连接,以便了解如何连接它们。在此过程中,将执行以下查询:
SELECT
tc.constraint_name,
tc.table_name,
kcu.column_name,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name
FROM information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu
ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu
ON ccu.constraint_name = tc.constraint_name
WHERE constraint_type = 'FOREIGN KEY'
AND ccu.table_name = 'TableB'
AND tc.table_name IN ('TableA');
Run Code Online (Sandbox Code Playgroud)
WHERE(注意:使用最后一个子句IN是因为可以有多个可用基表。TableA 是基表,每个成功连接/联接的表将可用于其他联接,例如可以使用第三个表,AND ccu.table_name = 'TableC' AND tc.table_name IN ('TableA', 'TableB');依此类推。)
当使用 admin db 用户(具有最常见的权限,如 GRANT、SELECT、INSERT、UPDATE、DELETE、TRUNCATE...)执行查询时,结果如下所示:
constraint_name | …Run Code Online (Sandbox Code Playgroud) 我试图加入,information_schema.columns但发现无法做到,那pg_table_def就是等价的。
但它存在仅显示 中存在的模式的问题search_path,我怎样才能information_schema.columns从pg_table_def
或者设置search_path到处搜索?
我有一个表,breeds其主键为breed_name,并且希望获取引用的所有表、列和约束的列表,breeds无论 中引用的列如何breeds。如果还有另一个表,cats并且该表具有如下约束:
CREATE TABLE cats
(
cat_name text,
cat_breed text,
CONSTRAINT cat_breed_name
FOREIGN KEY (cat_breed) REFERENCES breeds(breed_name)
)
Run Code Online (Sandbox Code Playgroud)
我应该返回如下一行:
base_table base_col referencing_table referencing_col constraint_sql
breeds breed_name cats cat_breed CONSTRAINT cat_breed_name FOREIGN KEY (cat_breed) REFERENCES breeds(breed_name)
Run Code Online (Sandbox Code Playgroud)
还应该列出非主键引用,并且它应该处理复合键。
postgresql ×4
sql ×4
mysql ×2
sql-server ×2
t-sql ×2
c# ×1
constraints ×1
database ×1
dynamic-sql ×1
foreign-keys ×1
grant ×1
metadata ×1
plpgsql ×1
privileges ×1
select ×1
sqlcommand ×1
views ×1