我正在尝试构造一个动态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 );
我的问题是print语句没有返回任何我认为是因为@user_script
变量为NULL
的内容。
要评估我的表是否实际返回结果,我运行此查询(上述查询的完全副本,而不将其分配给变量),此查询返回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()
,用实际空格替换SPCACE()
,但我遇到了同样的问题。
我终于检查了第二个查询的返回结果是否为NULL
。但是没有一行是NULL
。
感谢您的帮助
答案 0 :(得分:2)
尝试添加
SET @user_script = ''
在之前的行上
select @user_script += ....
答案 1 :(得分:0)
您可以使用
开始选择SELECT @user_script = ISNULL(@user_script, '') + ...