sql - SELECT INTO 语句不能包含将值分配给变量的 SELECT 语句
问题描述
我正在尝试创建一个存储过程或函数来查找表中每列中空值的数量。
我在确定将代码转换为存储过程/函数的语法时遇到问题。
DECLARE @SQL NVARCHAR(MAX)
SELECT @SQL = (
SELECT '
' +
STUFF((
SELECT ', [' + c.name + '] = ' + CASE WHEN c.is_nullable = 0 THEN '0' ELSE 'COUNT(*) - COUNT([' + c.name + '])' END
FROM sys.columns c
WHERE c.[object_id] = o.[object_id]
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 2, 'SELECT ''' + SCHEMA_NAME(o.[schema_id]) + '.' + o.name + ''', COUNT(*), ') + '
FROM [' + SCHEMA_NAME(o.[schema_id]) + '].[' + o.name + ']'
FROM sys.objects o
WHERE o.[type] = 'U'
AND o.is_ms_shipped = 0
AND [name] = 'BSEG'
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
INTO xzy
PRINT @SQL
EXEC sys.sp_executesql @SQL
我想将结果存储在表格中。但我收到以下错误消息:
Msg 194, Level 15, State 1, Line 2
A SELECT INTO statement cannot contain a SELECT statement that assigns values to a variable.
所以我的最终目标是拥有一个存储过程/函数,它在执行时会在表的每一列中给出空值的数量,结果将存储在另一个结果表中。
解决方案
您能否检查以下更改-
从查询中删除分配部分,只需使用简单的选择语句作为 -
SELECT '' +
STUFF((
...
--Note: Write the SQL in such way so that only SQL
--text from STUFF functions is returned. There is no
--requirement of assigning the text first to variable @SQL
在 INTO 键之前添加 INSERT,如下所示 -
...
INSERT INTO xzy
...
如果仍然没有成功,请提供 PRINT @SQL 命令的输出,并进行上述 2 处更改。
推荐阅读
- c - 在 Sphinx 的两页上记录一个函数?
- wpf - 处理列表视图中用户控件内部的事件
- cmd - 使用带有系统限制的 cmd 错误代码
- javascript - 我遇到了一个奇怪的错误,我以前从未见过 bootstrap 和 javascript。有谁知道这意味着什么?
- php - 或运算符上的 PHP array_filter
- json - 如何解析字符串或对象的 JSON 数组?
- contextmenu - 确定 `contextmenu` 命令是否真的打开了上下文菜单
- python - 嵌套/转义 f 字符串“=”(等号)表达式
- node.js - GET http://localhost:3000/:/localhost:4000 404(未找到)
- python - SciPy curve_fit 显示直线并且不适合数据