为 sql 服务器数据库管理生成下拉列表

generate dropdown list for sql server db management

我需要建立一个网页,让人们可以直接管理数据库tables:添加和删除记录,修改字段值等等

大多数 table 中的许多字段确实引用了其他 table 中的值(尽管并非所有字段都有 FK 约束)因此对于这些字段我需要显示接受的下拉列表table 个值。

由于我的技能很差,我能找到的唯一解决方案是创建一个新的 table,我会在其中列出所有 table 的所有字段,并为每个字段设置充分的查询:像这样的东西:

    TableName   ColField    LookupQuery
    Sales       UserID      Select UserID from Users where Users.Active='1'

等等

但我想知道...是否有(好得多)更好的方法来实现相同的结果?

如果没有..

我如何以编程方式创建一个 table 来列出所有 table 的所有现有字段,这样我只需要添加 lookupquery 字段? 现在我用

insert into Tables (IDF,TableName,ColName,DataType,MaxLen) 
SELECT T.Name+C.Name,  T.NAME , C.NAME , P.NAME , P.MAX_LENGTH
FROM SYS.OBJECTS AS T
JOIN SYS.COLUMNS AS C
ON T.OBJECT_ID=C.OBJECT_ID
JOIN SYS.TYPES AS P
ON C.SYSTEM_TYPE_ID=P.SYSTEM_TYPE_ID
WHERE T.TYPE_DESC='USER_TABLE' and P.Name <>'sysname' and c.name<>'ID';

但这每次都会添加所有 table 和列.. 我试图添加一些约束但执行立即停止..虽然试图添加一些"EXCEPT....."但还没有找到工作解决方案..

因此我只能第一次使用它,然后手动添加额外的行..

谢谢 塞尔吉奥

你很接近,只需要添加一个 LEFT JOIN 来排除已经存在于 Tables 中的表和列:

INSERT INTO Tables
(
    IDF,
    TableName,
    ColName,
    DataType,
    MaxLen
)
SELECT T.Name+C.Name,  T.NAME , C.NAME , P.NAME , P.MAX_LENGTH
FROM SYS.OBJECTS       AS T
INNER JOIN SYS.COLUMNS AS C ON T.OBJECT_ID=C.OBJECT_ID
INNER JOIN SYS.TYPES   AS P ON C.SYSTEM_TYPE_ID=P.SYSTEM_TYPE_ID
LEFT JOIN dbo.Tables   AS X ON T.NAME = X.TableName AND C.NAME = X.ColName
WHERE T.TYPE_DESC='USER_TABLE' and P.Name <>'sysname' and c.name<>'ID'
    and X.IDF IS NULL;