SQL Server sp_executesql查询错误

时间:2018-08-13 06:57:53

标签: sql sql-server tsql

当我尝试执行以下查询时,我不断收到错误消息。我对sp_executesql并不陌生,并且一直在尝试解决此错误。 任何帮助表示赞赏。

查询

DECLARE @db VARCHAR(20)
DECLARE @sql NVARCHAR(max)

SET @db = 'db_1'                           -- line 29
SET @sql = N'SELECT *
FROM [metadata].[table_name] A
JOIN [linked_server].' + @db + '.sys.objects B ON A.Tablename = B.name
JOIN [linked_server].=' + @db + '.sys.columns C ON A.columnname = C.Name
    AND B.object_id = C.object_id
JOIN [linked_server].'+@db+'.sys.types D ON D.user_type_id = C.user_type_id
WHERE A.Channel =' + @db + 'AND CHECKSUM(CONVERT(VARCHAR, A.Datatype, 126), 
CONVERT(INT, A.Max_Length)) 
     <> CHECKSUM(CONVERT(VARCHAR, D.name, 126), CONVERT(INT, C.max_Length))'

EXECUTE sp_executesql @sql

错误

  

第102层15州立29行   '='附近的语法不正确。

1 个答案:

答案 0 :(得分:0)

JOIN [linked_server].=' + @dbWHERE A.Channel =' + @db + 'AND中存在问题 请检查是否可以使用

 DECLARE @db VARCHAR(20)
    DECLARE @sql NVARCHAR(max)

    SET @db = 'db_1'
    SET @sql = N'SELECT *
    FROM [metadata].[table_name] A
    JOIN [linked_server].' + @db + '.sys.objects B ON A.Tablename = B.name
    JOIN [linked_server].' + @db + '.sys.columns C ON A.columnname = C.Name
        AND B.object_id = C.object_id
    JOIN [linked_server].'+@db+'.sys.types D ON D.user_type_id = C.user_type_id
    WHERE A.Channel = ' + @db + ' AND CHECKSUM(CONVERT(VARCHAR, A.Datatype, 126), 
    CONVERT(INT, A.Max_Length)) 
         <> CHECKSUM(CONVERT(VARCHAR, D.name, 126), CONVERT(INT, C.max_Length))'

    EXECUTE sp_executesql @sql