如何在 SQL 服务器中动态查询属性?

How can I query properties dynamically in SQL Server?

我目前正在做一个项目,其中包括一个自动炫耀部分。

基本上是做什么的:

这样我就可以编写一个存储过程来检查某个 Fox 是否抓到了一只鸡,如果抓到了 returns 1,并在 Hunter 上添加天赋用户 UI.

这有一些缺点:

难道没有我所缺少的更简单的方法吗?

EDIT:


示例:

我有一只table狐狸:

FoxID FoxName FoxColor FoxSize Valid
  1   Swiper    red      12      1

我会有一个table天赋

FlairID FlairName FlairStoredProcedure Valid
   1       Big       pFlairs_IsFoxBig    1
   2      Green    pFlairs_IsFoxGreen    1

我会有 3 个存储过程:

pFox_Flairs

@FoxID int
    DECLARE @CurrentFlairSP as varchar(100)
    DECLARE @CurrentIDIndex as varchar(100) = 1
    DECLARE @ResultFlairs as table(FlairName as varchar(50), FlairColor as integer)
WHILE @CurrentIDIndex <= (SELECT MAX(ID) FROM Flairs WHERE Valid <> 0)
BEGIN
 IF EXISTS(SELECT * FROM Flairs WHERE ID = @CurrentIDIndex AND VALID <> 0)
BEGIN
  SET @CurrentFlairSP = CONCAT((SELECT TOP 1 FlairStoredProcedure FROM Flairs WHERE ID = @CurrentIDIndex AND VALID <> 0), ' @FoxID=@FoxID')
  INSERT INTO @ResultFlairs
  EXEC (@CurrentFlairSP)
 END
 @CurrentIDIndex += 1
END
SELECT * FROM @ResultFlairs

pFlairs_IsFoxBig

@FoxID int
SELECT 'Big' WHERE EXISTS( SELECT TOP 1 * FROM Fox WHERE ID = @Fox AND FoxSize > 10)

pFlairs_IsFoxGreen

@FoxID int
SELECT 'Green' WHERE EXISTS( SELECT TOP 1 * FROM Fox WHERE ID = @Fox AND FoxColor = 'green')

您可以创建一个 table 值函数来检查所有条件:

CREATE OR ALTER FUNCTION dbo.GetFlairs ( @FoxID int )
RETURNS TABLE
AS RETURN

SELECT v.FlairName
FROM Fox f
CROSS APPLY (
    SELECT 'Big'
    WHERE f.FoxSize > 10

    UNION ALL

    SELECT 'Green'
    WHERE f.FoxColor = 'green'
) v(FlairName)
WHERE f.FoxID = @FoxID;

go

那么你可以这样使用它:

SELECT *
FROM dbo.GetFlairs(123);

如果或当您添加更多属性或条件时,只需将它们作为另一个添加到函数中即可 UNION ALL