私は T-SQL にかなり慣れていないので、私が書いているスクリプトでいくつかの助けを借りることができます。スクリプトの目的は、動的テーブルを作成し、それらに関連データを入力することです。現在、いくつかの構文が欠落しているために発生したと推測される漠然としたエラーが発生しています。スクリプトは以下です。スクリプトを 1 回実行して、これらのテーブルを作成してロードするという考えです。このプロセスは、データ移行プロジェクトの一部です。スクリプトを「実行」すると、次のエラーが表示されます。ヒントや提案をいただければ幸いです。事前に感謝します。
エラー
Msg 102, Level 15, State 1, Line 81
Incorrect syntax near 'getSFContactID'.
脚本
USE mylocalDB;
GO
-- Declare variables to temporarily hold dynamic SQL scripts
DECLARE @V_SF_CONTACT_ID VARCHAR(18) = '',
@V_TABLESCRIPT NVARCHAR(MAX) = '',
@V_INSERTSCRIPT NVARCHAR(MAX) = '',
-- Declare variables to temporarily hold query records
@V_FIRST_NAME nvarchar(50) = '',
@V_LAST_NAME nvarchar(50) = '',
@V_COMPANY nvarchar(100) = '',
@V_ADDRESS_1 nvarchar(50) = '',
@V_ADDRESS_2 nvarchar(50) = '',
@V_CITY nvarchar(50) = '',
@V_STATE nvarchar(2) = '',
@V_ZIP nvarchar(10) = '',
@V_Phone nvarchar(20) = ''
DECLARE getSFContactID CURSOR
FOR SELECT distinct CONTACTSFID FROM xrefListContactToAccountKey
OPEN getSFContactID
FETCH NEXT FROM getSFContactID
INTO @V_SF_CONTACT_ID
WHILE @@FETCH_STATUS = 0
BEGIN
/******************************************************
BEGIN CREATING DYNAMIC TABLES
*******************************************************/
SET @V_TABLESCRIPT = '';
SET @V_INSERTSCRIPT = '';
IF OBJECT_ID(@V_SF_CONTACT_ID, 'U') IS NOT NULL
BEGIN
SET @V_TABLESCRIPT = 'CREATE TABLE [dbo].[' + @V_SF_CONTACT_ID + '](
[Key] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,
[FIRST_NAME] [nvarchar](50) NOT NULL,
[LAST_NAME] [nvarchar](50) NOT NULL,
[COMPANY] [nvarchar](100) NOT NULL,
[ADDRESS_1] [nvarchar](50) NOT NULL,
[ADDRESS_2] [nvarchar](50) NOT NULL,
[CITY] [nvarchar](50) NOT NULL,
[STATE] [nvarchar](2) NOT NULL,
[ZIP] [nvarchar](10) NOT NULL,
[Phone] [nvarchar](20) NULL,
CONSTRAINT [PK_' + @V_SF_CONTACT_ID + '] PRIMARY KEY NONCLUSTERED ([Key] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]';
--PRINT @V_SF_CONTACT_ID
EXEC (@V_TABLESCRIPT)
BREAK
SET @V_INSERTSCRIPT = 'INSERT INTO [dbo].[' + @V_SF_CONTACT_ID + ']
Select CL.FirstName as FIRST_NAME,
CL.LastName as LAST_NAME,
CL.COMPANY,
CL.Street as ADDRESS_1,
CL.Street2 as ADDRESS_2,
CL.CITY,
CL.[STATE],
CL.ZIP,
CL.Phone
FROM [dbo].[Contact] CL
WHERE CONTACTSFID = ''' + @V_SF_CONTACT_ID + '';
EXEC (@V_INSERTSCRIPT)
FETCH NEXT FROM getSFContactID INTO @V_SF_CONTACT_ID
END
CLOSE getSFContactID
DEALLOCATE getSFContactID