无法将值 NULL 插入列

Dan*_*uss 2 sql-server sql-server-2008-r2

我有一个脚本,用于编写我在 SQL 2014 上使用的用户权限的脚本,该脚本运行良好,但是当我尝试使用 SQL 2008 时,出现以下错误:

消息 515,级别 16,状态 2,第 4 行无法将值 NULL 插入到列“UserName”、表“@DB_USers”中;列不允许空值。插入失败。该语句已终止。

(0 行受影响)

DECLARE @DB_USers TABLE
(DBName sysname, UserName sysname, LoginType sysname, AssociatedRole varchar(max),create_date datetime,modify_date datetime)

INSERT @DB_USers
EXEC sp_MSforeachdb

'
use [?]
SELECT ''?'' AS DB_Name,
case prin.name when ''dbo'' then prin.name + '' (''+ (select SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') + '')'' else prin.name end AS UserName,
prin.type_desc AS LoginType,
isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole ,create_date,modify_date
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id
WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and
prin.is_fixed_role <> 1 AND prin.name NOT LIKE ''##%'''

SELECT

dbname,username ,logintype ,create_date ,modify_date ,

STUFF(

(

SELECT ',' + CONVERT(VARCHAR(500),associatedrole)

FROM @DB_USers user2

WHERE

user1.DBName=user2.DBName AND user1.UserName=user2.UserName

FOR XML PATH('')

)

,1,1,'') AS Permissions_user

FROM @DB_USers user1

GROUP BY

dbname,username ,logintype ,create_date ,modify_date

ORDER BY DBName,username
Run Code Online (Sandbox Code Playgroud)

小智 7

我没有在这个真的很难看,但你定义DBNameUserName以及LoginType在列@DB_USerssysname。类型sysname定义为NOT NULL

SQL Server 中的 SYSNAME 数据类型是什么?

至于为什么你会得到一个NULL值,你将不得不检查你正在运行的数据集。