简体   繁体   中英

SQL server sp_executesql query error

While I am trying to execute the following query, I keep getting an error. I am fairly new to sp_executesql and have been trying to work around this error. Any help is appreciated.

Query

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

Error

Msg 102, Level 15, State 1, Line 29 Incorrect syntax near '='.

There is problem in JOIN [linked_server].=' + @db and WHERE A.Channel =' + @db + 'AND please check this it will work

 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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM