动态 SQL 字符串 returns NULL
Dynamic SQL string returns NULL
我正在尝试构建一个动态的 SQL 语句,但由于某种原因它没有返回预期的结果。
这是我的查询
DECLARE @user_script AS VARCHAR(MAX);
SELECT @user_script += 'IF NOT EXISTS (SELECT [name] FROM sys.database_principals WHERE [name] = '
+ SPACE(1) + '''' + [name] + '''' + ') BEGIN CREATE USER ' + SPACE(1)
+ QUOTENAME([name]) + ' FOR LOGIN ' + QUOTENAME([name])
+ ' WITH DEFAULT_SCHEMA = ' + QUOTENAME([default_schema_name])
+ SPACE(1) + 'END; '
FROM sys.database_principals AS rm
WHERE [type] IN ( 'U', 'S', 'G' )
AND rm.default_schema_name IS NOT NULL;
PRINT ( @user_script );
我的问题是打印语句没有返回任何东西,我认为这是因为 @user_script
变量是 NULL
。
为了评估我的 table 是否真的返回结果,我 运行 这个查询(上面查询的精确副本,没有将它分配给变量)和这个查询 returns 10 行
SELECT 'IF NOT EXISTS (SELECT [name] FROM sys.database_principals WHERE [name] = '
+ SPACE(1) + '''' + [name] + '''' + ') BEGIN CREATE USER ' + SPACE(1)
+ QUOTENAME([name]) + ' FOR LOGIN ' + QUOTENAME([name])
+ ' WITH DEFAULT_SCHEMA = ' + QUOTENAME([default_schema_name])
+ SPACE(1) + 'END; '
FROM sys.database_principals AS rm
WHERE [type] IN ( 'U', 'S', 'G' )
AND rm.default_schema_name IS NOT NULL;
我尝试用引号替换函数 QUOTENAME()
,用实际的 space 替换 SPCACE()
,但我遇到了同样的问题。
我终于检查了第二个查询的返回结果是否是 NULL
。但是 none 行是 NULL
。
感谢您的帮助
您可以用
开始 select
SELECT @user_script = ISNULL(@user_script, '') + ...
试着放一个
SET @user_script = ''
在您
之前的那一行
select @user_script += ....
我正在尝试构建一个动态的 SQL 语句,但由于某种原因它没有返回预期的结果。 这是我的查询
DECLARE @user_script AS VARCHAR(MAX);
SELECT @user_script += 'IF NOT EXISTS (SELECT [name] FROM sys.database_principals WHERE [name] = '
+ SPACE(1) + '''' + [name] + '''' + ') BEGIN CREATE USER ' + SPACE(1)
+ QUOTENAME([name]) + ' FOR LOGIN ' + QUOTENAME([name])
+ ' WITH DEFAULT_SCHEMA = ' + QUOTENAME([default_schema_name])
+ SPACE(1) + 'END; '
FROM sys.database_principals AS rm
WHERE [type] IN ( 'U', 'S', 'G' )
AND rm.default_schema_name IS NOT NULL;
PRINT ( @user_script );
我的问题是打印语句没有返回任何东西,我认为这是因为 @user_script
变量是 NULL
。
为了评估我的 table 是否真的返回结果,我 运行 这个查询(上面查询的精确副本,没有将它分配给变量)和这个查询 returns 10 行
SELECT 'IF NOT EXISTS (SELECT [name] FROM sys.database_principals WHERE [name] = '
+ SPACE(1) + '''' + [name] + '''' + ') BEGIN CREATE USER ' + SPACE(1)
+ QUOTENAME([name]) + ' FOR LOGIN ' + QUOTENAME([name])
+ ' WITH DEFAULT_SCHEMA = ' + QUOTENAME([default_schema_name])
+ SPACE(1) + 'END; '
FROM sys.database_principals AS rm
WHERE [type] IN ( 'U', 'S', 'G' )
AND rm.default_schema_name IS NOT NULL;
我尝试用引号替换函数 QUOTENAME()
,用实际的 space 替换 SPCACE()
,但我遇到了同样的问题。
我终于检查了第二个查询的返回结果是否是 NULL
。但是 none 行是 NULL
。
感谢您的帮助
您可以用
开始 selectSELECT @user_script = ISNULL(@user_script, '') + ...
试着放一个
SET @user_script = ''
在您
之前的那一行select @user_script += ....