程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在此 T-SQL 语句中创建计数以获取 INT 值中的结果大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在此 T-SQL 语句中创建计数以获取 INT 值中的结果?

开发过程中遇到如何在此 T-SQL 语句中创建计数以获取 INT 值中的结果的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在此 T-SQL 语句中创建计数以获取 INT 值中的结果的解决方法建议,希望对你解决如何在此 T-SQL 语句中创建计数以获取 INT 值中的结果有所启发或帮助;

早上好,

我在 pl/sql 中有这个查询,但是当我声明计数时出现错误,我在声明变量后所做的查询中声明它,我不知道是否必须创建@R_675_10062@一个...

DECLARE @DB_name varchar(100) 
DECLARE @Command nvarchar(1000)
DECLARE database_cursor cursOR FOR 

SELECT COUNT(Name)
FROM MASTER.sys.sysdatabases 
--WHERE name --NOT IN ('master','tempdb','msdb' )

OPEN database_cursor 

FETCH NEXT FROM database_cursor INTO @db_name

WHILE @@FETCH_STATUS = 0 
BEGIN 
     SELECT @Command = '
     
     SELECT '''  + @db_name + ''' AS Databasename,''guest'' AS Database_User,[permission_name],[state_desc]
FROM ' +@db_name+ '.sys.database_permissions
WHERE [grantee_principal_ID] = DATABASE_PRINCIPAL_ID(''guest'')
  AND [state_desc] liKE ''GRANT%''
  AND [permission_name] = ''CONNECT'''


     
     EXEC sp_executesql @Command

     FETCH NEXT FROM database_cursor INTO @db_name 
END 

CLOSE database_cursor 
DEALLOCATE database_cursor

错误代码: 消息 102,级别 15,状态 1,第 7 行 '4 附近的语法不正确。

结束时间:2021-06-21T11:45:39.7206852+02:00

我希望能够使用上述查询计算这些值。

如何在此 T-SQL 语句中创建计数以获取 INT 值中的结果

解决方法

您的错误消息来自这样一个事实,即您的光标在每一行中都没有名称,它有一个数据库计数。

这意味着当你创建你的@command 你有这个...

FROM ' +@db_name+ '.sys.database_permissions

=>

FROM 4.sys.database_permissions

显然有一个 4 是没有意义的。

你的光标应该是...

DECLARE database_cursor cursOR FOR 
    SELECT QUOTename(Name)
    FROM MASTER.sys.sysdatabases 
    --WHERE name --NOT IN ('master','tempdb','msdb' )

如果你想计算权限的数量,并将它们加起来,我会避免使用游标并使用 union all 将多个源表组合成类似这样的东西......

DECLARE @permissions nvarchar(MAX) 
DECLARE @Command nvarchar(MAX)

SELECT
    @permissions = string_agg(N'SELECT * FROM ' + QUOTename(Name) + '.sys.database_permissions',N' union all ')
FROM
    MASTER.sys.sysdatabases 
--WHERE name --NOT IN ('master','msdb' )

 SELECT
    @Command = '
        SELECT COUNT(*) 
        FROM (' + @permissions + ') AS permissions
        WHERE [grantee_principal_id] = DATABASE_PRINCIPAL_ID(''guest'')
        AND [state_desc] LIKE ''GRANT%''
        AND [permission_name] = ''CONNECT''
     '

 EXEC sp_executesql @Command

(请原谅打字错误,我在打电话。)

,

另一种从字面上理解您的查询的方法是使用 union allCOUNT 行返回数据集。我在这里使用“旧”FOR XML PATH 方法,因为不知道您是否使用 SQL Server 2017+:

DECLARE @SQL nvarchar(MAX),@CRLF NCHAR(2) = NCHAR(13) + NCHAR(10);

SET @SQL = N'SELECT COUNT(*) AS Users' + @CRLF +
           N'FROM (' + @CRLF +
           stuFF((SELECT N'union all' + @CRLF +
                         N'SELECT N' + QUOTename(d.[name],'''') + N' AS Databasename,' + @CRLF +
                         N'       ''guest'' AS Database_User,' + @CRLF +
                         N'       [permission_name],' + @CRLF +
                         N'       [state_desc]' + @CRLF +
                         N'FROM ' + QUOTename(d.[name])  + '.sys.database_permissions' + @CRLF +
                         N'WHERE [grantee_principal_id] = DATABASE_PRINCIPAL_ID(''guest'')' + @CRLF +
                         N'  AND [state_desc] LIKE ''GRANT%''' + @CRLF +
                         N'  AND [permission_name] = ''CONNECT'''
                  FROM sys.databases d
                  FOR XML PATH(''),TYPE).value('(./text())[1]','nvarchar(MAX)'),1,11,N'') + N') AS c;';

--PRINT @SQL; --Your best friend.
EXEC sys.sp_executesql @SQL;

大佬总结

以上是大佬教程为你收集整理的如何在此 T-SQL 语句中创建计数以获取 INT 值中的结果全部内容,希望文章能够帮你解决如何在此 T-SQL 语句中创建计数以获取 INT 值中的结果所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。