2
我有这样的脚本:MERGE语句,如果内部条件
DECLARE @TenantId INT = 1
IF EXISTS(SELECT 1
FROM [DB1].[Client1].information_schema.tables
WHERE table_type='BASE TABLE'
AND [TABLE_SCHEMA] = 'dbo'
AND table_name='MyTable')
BEGIN
MERGE info.[MyTable] AS t
USING (
SELECT [Id],
[Name]
FROM [DB1].[Client1].dbo.MyTable
) s
ON (t.[Id] = s.[Id] AND t.[TenantId] = @TenantId)
WHEN MATCHED THEN
UPDATE SET
t.[Name] = s.[Name]
WHEN NOT MATCHED THEN
INSERT ([Id], [TenantId], [Name])
VALUES (s.[Id], @TenantId, s.[Name]);
END
为什么给我一个错误的选择了利用内幕,如果表不存在?我不能运行该脚本时表不存在。如果表格存在没问题。
由于该表不存在,所以无法编译您的查询。您需要确保表格存在或将查询移动到动态sql中。 –
当你运行某些东西时,会为每个语句创建一个查询计划,包括那些在块内部的语句。一切都必须存在才能成功完成。您可以通过将合并移入存储过程来完成此操作。 –
谢谢你的答案 – carlosm