0
如何防止這種錯誤SQL SERVER如何避免外塊的存儲過程中的第一次運行
「OLE DB提供程序‘MSDASQL’爲鏈接服務器返回消息 」 [Teradata數據] [ODBC Teradata數據驅動程序] [Teradata數據庫]對象 「teradataDB.tablename」不存在「。
我使用OPENQUERY來檢查Teradata表是否存在,如果存在,刪除表和選擇重新創建表。我使用openquery將Teradata表中的數據插入到sql服務器表中。 然而,當我運行存儲過程時,它給了我上面的錯誤,因爲它執行插入並且先在最後兩行選擇。我如何修改它以先運行第一個塊,然後運行最後兩行?
DECLARE @strSql NVARCHAR(MAX) = ''
DECLARE @TableName NVARCHAR(50)
DECLARE @linkedServer NVARCHAR(50)
DECLARE @TabExists BIT
DECLARE TableCursor CURSOR LOCAL FOR
SELECT TABLENAME FROM #TableList
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @strSql='Select count(1) as TabExists FROM DBC.TABLES WHERE TABLEKIND=''T'' AND DATABASENAME=''teradataDB'' AND TABLENAME=''' [email protected]+ ''''
SET @strSql = N'select @TabExists=TabExists from OPENQUERY('[email protected]+', ''' + REPLACE(@strSql, '''', '''''') + ''')'
EXEC sp_executesql @strSql, N'@TabExists BIT OUT', @TabExists OUT;
FETCH NEXT FROM TableCursor INTO @TableName
IF (@TableName ='tablename')
BEGIN
IF (@TableName ='tablename') AND (@TabExists = 1)
BEGIN
EXEC sp_executesql
N'
EXEC (
''DROP TABLE teradataDB.tablename'') AT [linkedserver];'
END
EXEC sp_executesql
N'
EXEC (
''CREATE TABLE AS SELECT (
~~~~
)
'') AT [linkedserver];'
END
END
CLOSE TableCursor
DEALLOCATE TableCursor
INSERT INTO sqlServerDB.tablename
SELECT * FROM OPENQUERY (linkedserver, 'SELECT columns FROM teradataDB.tablename')