当我尝试执行以下查询时,我不断收到错误消息。我对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行 '='附近的语法不正确。
答案 0 :(得分:0)
JOIN [linked_server].=' + @db
和WHERE 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