gpt4 book ai didi

sql-server - 创建一个 SQL View 检查从另一个表提供的各种条件

转载 作者:行者123 更新时间:2023-12-03 12:57:02 25 4
gpt4 key购买 nike

我想创建一个名为 Errors 的 View ,该 View 来自另一个包含条件的设置表。

设置表将有 2 列,如下所示:

+------------------------+--------------------------------------------------+
| Description | Criteria |
+------------------------+--------------------------------------------------+
| Missing birth country | from stu where bcu = '' |
| Email invalid | from con where em not like '%@%.%' and em <> '' |
+------------------------+--------------------------------------------------+

错误 View 看起来只是像这样的两列(注意 ID 是一个学生 ID,用于说明目的可以是任何数字)

+------+------------------------+
| ID | Error |
+------+------------------------+
| 123 | Email invalid |
| 123 | Missing birth country |
| 234 | Email invalid |
+------+------------------------+
etc...

这是目前为止我对 SQL View 的了解。如何创建动态 View 以从设置表中提取这些设置?

--missing birth country
select id,
'Missing birth country.' as err
from stu where bcu = '' and del = 0

union all

--invalid email format
select id,
'Email invalid format in Contacts' as err
from con where em not like '%@%.%' and em <> '' and del = 0

请注意这是与 MS SQL Server 一起使用的,我更喜欢适用于 2008+ 但也对各种选项开放的解决方案。

最佳答案

这个有效:

DECLARE @SQL NVARCHAR(max)

SET @SQL = N''

SELECT
@SQL = @SQL + 'SELECT id, '''+ Description + ''' as err ' + Criteria +CHAR(13)+CHAR(10)+'UNION ALL'+CHAR(13)+CHAR(10)
FROM settings

SET @SQL = LEFT(@SQL, LEN(@SQL) - 11)
PRINT @SQL
EXEC sp_executesql @SQL

您可能应该通过转义描述字符串中的字符来改进它,但这是您问题的核心答案。


编辑:使用 OP 注释创建表函数和调用它的 View 。

CREATE FUNCTION dbo.tvf_getErrors
RETURNS TABLE AS

(
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost; Trusted_Connection=yes;', 'EXEC(N''sp_executesql N'''''' + ''SELECT ''''''''select '''''''' + pk + '''''''' as id, '''''''''''''''''''''''' + de + '''''''''''''''''''''''' as err '''''''' + CR + '''''''' UNION ALL'''''''' as sql FROM DVAS'''''' )')
)
RETURN
GO

我根本无法检查是否所有的东西都在那里......而且看起来更丑陋。现在,您所要做的就是在 View 中引用这个表值函数,如下所示:

CREATE VIEW dbo.v_getErrors 
AS
SELECT * FROM dbo.tvf_getErrors()

在执行此操作时,我意识到您可以省略使用表值函数并直接从 View 调用 OpenRowSet,如下所示:

CREATE VIEW dbo.v_getErrors 
AS
SELECT * FROM OPENROWSET('SQLNCLI', 'Server=localhost; Trusted_Connection=yes;', 'EXEC(N''sp_executesql N'''''' + ''SELECT ''''''''select '''''''' + pk + '''''''' as id, '''''''''''''''''''''''' + de + '''''''''''''''''''''''' as err '''''''' + CR + '''''''' UNION ALL'''''''' as sql FROM DVAS'''''' )')

就是这样。一旦你弄清楚所有的撇号,这就会起作用。

关于sql-server - 创建一个 SQL View 检查从另一个表提供的各种条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52939474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com