0

我对 T-SQL 相当陌生,可以对我正在编写的脚本使用一些帮助。该脚本的目的是创建动态表并用相关数据填充它们。目前我得到一个模糊的错误,我猜测是因为我缺少一些语法。脚本如下。这个想法是我将运行一次脚本来创建和加载这些表。此过程是数据迁移项目的一部分。这是我“执行”脚本时收到的错误。任何提示或建议表示赞赏。提前谢谢。

错误

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 
4

1 回答 1

2

您的BEGIN语句 (2) 比END语句 (1) 多。其中之一(要么 theWHILE或 the IF)未关闭,因此您需要添加一个END来关闭它。

于 2013-09-12T22:31:24.447 回答