为 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;
我需要建立一个网页,让人们可以直接管理数据库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;