我有3张桌子:
1-合同 -contracts_id -subject_contract -case_id
contracts_id | subject_contract | case_id
001 | name | 01
002 | name | 02
003 | name | 01
2-contracts_files -contracts_id -file_data
contracts_id | file_data
001 | image <varbinary(MAX)>
002 | image <varbinary(MAX)>
001 | image <varbinary(MAX)>
002 | image <varbinary(MAX)>
003 | image <varbinary(MAX)>
003 | image <varbinary(MAX)>
3例 -案例ID -case_name
case_id | case_name
01 | case one
02 | case two
需要在dataGridView中输出如下:
contracts_id | subject_contract | case_name | file_data | file_data
001 | name | case one | image | image
002 | name | case two | image | image
003 | name | case one | image | image
我试试这个:
create proc GET_ALL_CONTRACTS
as
SELECT contracts.[contracts_id]
,[subject_contract]
,[case_name]
,[file_data]
FROM contracts, contracts_files
Contracts INNER join Cases
ON Cases.case_id = Contracts.case_id
where contracts_files.contracts_id = Contracts.contracts_id
答案 0 :(得分:0)
我认为我和我参与过的一个项目有类似的情况。
您需要做的是使用存储过程和外国人密钥将多个表中的所有列组合到一个表中。确保首先获得唯一列,然后将记录与它们链接起来。
我们以您的架构为例,我们将创建一个新表并将其命名为ContractsMain
,它将包含以下列:
[ID] | [ContractsID] | [SubjectContract] | [ContractsFileData] | [CaseID] | [CaseName]
现在,我们将创建一个存储过程,该过程将从每个表中获取要插入每列的记录。 示例:
ContractID = ( SELECT ContractsMain.ContractsID
FROM ContractsMain
INNER JOIN Contracts ON Contracts_ID = ContractsMain.ContractsID ),
SubjectContract = ( SELECT ContractsMain.SubjectContract
FROM ContractsMain
INNER JOIN Contracts ON Contracts_ID = ContractsMain.ContractsID ),
因此,您将在每个列上执行相同的方法,并在每个列上添加您的函数和条件,并让程序根据您的条件更新和更改表。
然后,您创建一个新视图并添加ContractsMain表,并选择您需要查看的列。
任何需要ContractsMain所没有的新列的新视图,您只需将列添加到ContractsMain中并重复上述过程。
我主要在需要两个以上表的Reports和Views上执行此操作。其中将记录组织在一个地方并且更具可读性。将主表和记录放在一边并且不受影响,如果主表(新记录,修改等等)有任何变化,这将自动在ContractsMain中更新。