Есть проблема с вызовом хранимой процедуры неизвестного типа объекта - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь написать запрос, который должен вызвать хранимую процедуру. Но всегда выдает ошибку:

Неизвестный тип объекта 'TABLEIXICHistoricalData', используемый в операторе CREATE, DROP или ALTER.

Это запрос:

USE ETLCourse

DECLARE @LOOP TABLE 
              (
                  ID INT IDENTITY(1,1),
                  TableName NVARCHAR(100)
              )

INSERT INTO @LOOP (TableName)
    SELECT TABLE_NAME
    FROM INFORMATION_SCHEMA.TABLES 
    WHERE TABLE_NAME LIKE '%_Stocks%'

DECLARE @b INT = 1, @m INT, @t NVARCHAR(100)

SELECT @m = MAX(ID) FROM @LOOP

WHILE @b <= @m
BEGIN
    SELECT @t = TableName 
    FROM @LOOP 
    WHERE ID = @b

    EXECUTE [dbo].[stp_BuildNormalizedTable] @t

    SET @b = @b + 1
END

и вот процедура:

ALTER PROCEDURE [dbo].[stp_BuildNormalizedTable]
    @table NVARCHAR(100)
AS
BEGIN
    DECLARE @cleanTable NVARCHAR(100),
            @s NVARCHAR(MAX)

    SET @cleanTable = REPLACE(@table, '_Stocks', 'HistoricalData')

    SET @s = 'CREATE TABLE' + @cleanTable + '(ID INT IDENTITY(1,1), Price DECIMAL(13, 4), PriceDate DATE)
              INSERT INTO' + @cleanTable + '(Price,PriceDate) SELECT [Adj Close],[Date] FROM'
              + @table + ' ORDER BY Date ASC'

    --PRINT @s
    EXECUTE sp_executesql @s
END

Следует скопировать два определенных столбца и создать новую таблицу, используя @Loop таблицу и процедуру

1 Ответ

3 голосов
/ 08 мая 2019

Вам необходимо добавить «пробел» после «создать таблицу» и «вставить в» и «из»

declare @s nvarchar(max)
declare @cleantable nvarchar(100)
declare @table nvarchar(100)
set @cleantable = 'aaa'
set @table = 'bbb'

SET @s = 'CREATE TABLE' + @cleanTable + '(ID INT IDENTITY(1,1),Price Decimal(13,4),PriceDate DATE)
Insert into' + @cleanTable
+ '(Price,PriceDate) SELECT [Adj Close],[Date] FROM'
+ @table + ' ORDER BY Date ASC'

print @s

Выход:

CREATE TABLEaaa(ID INT IDENTITY(1,1),Price Decimal(13,4),PriceDate DATE)
Insert intoaaa(Price,PriceDate) SELECT [Adj Close],[Date] FROMbbb ORDER BY Date ASC

Используйте 'print' для проверки вашего запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...