找不到为什么这是错误的 - 返回错误 [英] Can't find why this is incorrect - returns error

查看:73
本文介绍了找不到为什么这是错误的 - 返回错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在网上找到了TSQL - 解决它你的方式 - 查找表中每列的NULL值的百分比,但是当我运行它时出现以下错误:



消息102,等级15,状态1,行20

')'附近的语法不正确。



我找不到原因。




  SET   NOCOUNT   ON  
DECLARE @ Statement NVARCHAR (MAX)= ' '
DECLARE @ Statement2 NVARCHAR (MAX)= ' '
DECLARE @ Fina lStatement NVARCHAR (MAX)= ' '
DECLARE @ TABLE_SCHEMA SYSNAME = ' 生产'
DECLARE @TABLE_NAME SYSNAME = ' 产品'
SELECT
@ Statement = @ Statement + ' SUM(CASE WHEN' + COLUMN_NAME + ' < span class =code-string> IS NULL THEN 1 ELSE 0 END)AS' + COLUMN_NAME + ' ,' + CHAR 13 ),
@ Statement2 = @ Statement2 + COLUMN_NAME + ' * 100 / OverallCount AS' + COLUMN_NAME + ' ,' + CHAR 13 FROM
INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @ TABLE_NAME AND TABLE_SCHEMA = @ TABLE_SCHEMA
IF @@ ROWCOUNT = 0
RAISERROR ' 表或视图schema%s和名称%s不存在o你没有适当的权限。' 16 1 @ TABLE_SCHEMA @ TABLE_NAME
ELSE
BEGIN
SELECT @ FinalStatement =
' SELECT' + LEFT @ Statement2 ,LEN( @ Statement2 )-2)+ FROM(SELECT' + LEFT @ Statement ,LEN( @ Statement )-2)+
' ,COUNT(*)AS Over allCount FROM' + @ TABLE_SCHEMA + ' 。' + @ TABLE_NAME + ' ) SubQuery'
EXEC @ FinalStatement



解决方案

你好dhMac



你错过了BEGIN的END。查看最后一行。



  SET   NOCOUNT   ON  

DECLARE @ Statement NVARCHAR (MAX)= ' '

DECLARE @ Statement2 NVARCHAR (MAX)= ' '

DECLARE @ FinalStatement NVARCHAR (MAX)= ' '

DECLARE @ TABLE_SCHEMA SYSNAME = ' 生产'

DECLARE @ TABLE_NAME SYSNAME = ' Product'

SELECT

@ Statement = @ Statement + ' SUM(CASE WHEN' + COLUMN_NAME + ' IS NULL THEN 1 ELSE 0 END)AS' + COLUMN_NAME + ' ,' + CHAR 13 ),

@ Statement2 = @ Statement2 + COLUMN_NAME + ' * 100 / OverallCount AS' + COLUMN_NAME + ' ,' + CHAR 13 FROM

INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = @ TABLE_NAME AND TABLE_SCHEMA = @ TABLE_SCHEMA

IF @@ ROWCOUNT = 0

RAISERROR ' 具有模式%s的表或视图和名称%s不存在,或者您没有适当的权限。' 16 1 @ TABLE_SCHEMA @ TABLE_NAME

ELSE

BEGIN

SELECT @ FinalStatement =

' < span class =code-string> SELECT' + LEFT @ Statement2 ,LEN ( @ Statement2 ) - 2)+ ' FROM(SELECT ' + LEFT @ Statement ,LEN( @Statement ) - 2)+

' ,COUNT(*) AS OverallCount FROM' + @ TABLE_SCHEMA + ' 。' + @ TABLE_NAME + ' )SubQuery'

EXEC @ FinalStatement

END


I found this on the web under "TSQL - Solve it YOUR Way - Finding the percentage of NULL values for each column in a table" but when I run it I get the following error:

Msg 102, Level 15, State 1, Line 20
Incorrect syntax near ')'.

I can't find out why.


SET NOCOUNT ON
DECLARE @Statement NVARCHAR(MAX) = ''
DECLARE @Statement2 NVARCHAR(MAX) = ''
DECLARE @FinalStatement NVARCHAR(MAX) = ''
DECLARE @TABLE_SCHEMA SYSNAME = 'Production'
DECLARE @TABLE_NAME SYSNAME = 'Product'
SELECT
        @Statement = @Statement + 'SUM(CASE WHEN ' + COLUMN_NAME + ' IS NULL THEN 1 ELSE 0 END) AS ' + COLUMN_NAME + ',' + CHAR(13) ,
        @Statement2 = @Statement2 + COLUMN_NAME + '*100 / OverallCount AS ' + COLUMN_NAME + ',' + CHAR(13) FROM
INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TABLE_NAME AND TABLE_SCHEMA = @TABLE_SCHEMA
IF @@ROWCOUNT = 0
        RAISERROR('TABLE OR VIEW with schema "%s" and name "%s" does not exists or you do not have appropriate permissions.',16,1, @TABLE_SCHEMA, @TABLE_NAME)
ELSE
BEGIN
        SELECT @FinalStatement =
                'SELECT ' + LEFT(@Statement2, LEN(@Statement2) -2) + ' FROM (SELECT ' + LEFT(@Statement, LEN(@Statement) -2) +
                ', COUNT(*) AS OverallCount FROM ' + @TABLE_SCHEMA + '.' + @TABLE_NAME + ') SubQuery'
        EXEC(@FinalStatement)


解决方案

Hi dhMac

You are missing the END for BEGIN. See the last line.

SET NOCOUNT ON

DECLARE @Statement NVARCHAR(MAX) = ''

DECLARE @Statement2 NVARCHAR(MAX) = ''

DECLARE @FinalStatement NVARCHAR(MAX) = ''

DECLARE @TABLE_SCHEMA SYSNAME = 'Production'

DECLARE @TABLE_NAME SYSNAME = 'Product'

SELECT

        @Statement = @Statement + 'SUM(CASE WHEN ' + COLUMN_NAME + ' IS NULL THEN 1 ELSE 0 END) AS ' + COLUMN_NAME + ',' + CHAR(13) ,

        @Statement2 = @Statement2 + COLUMN_NAME + '*100 / OverallCount AS ' + COLUMN_NAME + ',' + CHAR(13) FROM

INFORMATION_SCHEMA.COLUMNS

WHERE TABLE_NAME = @TABLE_NAME AND TABLE_SCHEMA = @TABLE_SCHEMA

IF @@ROWCOUNT = 0

        RAISERROR('TABLE OR VIEW with schema "%s" and name "%s" does not exists or you do not have appropriate permissions.',16,1, @TABLE_SCHEMA, @TABLE_NAME)

ELSE

BEGIN

   SELECT @FinalStatement =

                'SELECT ' + LEFT(@Statement2, LEN(@Statement2) -2) + ' FROM (SELECT ' + LEFT(@Statement, LEN(@Statement) -2) +

                ', COUNT(*) AS OverallCount FROM ' + @TABLE_SCHEMA + '.' + @TABLE_NAME + ') SubQuery'

        EXEC(@FinalStatement)

END


这篇关于找不到为什么这是错误的 - 返回错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆