Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 该列必须在编译时出现_Sql Server_Database_Tsql_Sql Update_Alter Table - Fatal编程技术网

Sql server 该列必须在编译时出现

Sql server 该列必须在编译时出现,sql-server,database,tsql,sql-update,alter-table,Sql Server,Database,Tsql,Sql Update,Alter Table,由于您的ALTER语句(即DDL语句)将列group\u id添加到#tmpImportData,该列不能在同一批中的UPDATE语句中使用。因为不能执行添加列的DDL查询,然后执行在同一批中使用该列的DML查询 这里有一篇文章更详细地回答了这个问题,尽管它来自一个与你的问题相反的问题: 具体而言: SQL在执行批处理之前编译批处理。(批处理是GO命令之间的所有内容)。编译时,如果命令引用表中存在的列,则该列必须在编译时出现 由于您的ALTER语句(即DDL语句)将列group\u id添加到

由于您的
ALTER
语句(即DDL语句)将列
group\u id
添加到
#tmpImportData
,该列不能在同一批中的
UPDATE
语句中使用。

因为不能执行添加列的DDL查询,然后执行在同一批中使用该列的DML查询

这里有一篇文章更详细地回答了这个问题,尽管它来自一个与你的问题相反的问题:

具体而言:

SQL在执行批处理之前编译批处理。(批处理是GO命令之间的所有内容)。编译时,如果命令引用表中存在的列,则该列必须在编译时出现


由于您的
ALTER
语句(即DDL语句)将列
group\u id
添加到
#tmpImportData
,因此该列不能在同一批中的
UPDATE
语句中使用。

DDE是否代表动态数据交换?还有,你应该知道。alter语句不会将列添加到tmp表中。我必须返回并突出显示它,然后运行它以添加它们。@CodeFlava--DDE应该是DDL。我已经修好了。另外,您的alter语句确实添加了列:
altertable#tmpImportData add group_id INT
我之所以这么说是因为它运行之后。选择不会导致显示任何结果。因此,如果我突出显示select*和f5,它将显示没有添加列的表。所以我突出显示alter语句,然后点击f5。然后运行select。他们现在在那里。。。我希望StackOverflow能让我们添加视频…DDE代表动态数据交换吗?还有,你应该知道。alter语句不会将列添加到tmp表中。我必须返回并突出显示它,然后运行它以添加它们。@CodeFlava--DDE应该是DDL。我已经修好了。另外,您的alter语句确实添加了列:
altertable#tmpImportData add group_id INT
我之所以这么说是因为它运行之后。选择不会导致显示任何结果。因此,如果我突出显示select*和f5,它将显示没有添加列的表。所以我突出显示alter语句,然后点击f5。然后运行select。他们现在在那里。。。我希望StackOverflow能让我们添加视频。。。
DROP TABLE #tmpImportData
USE database_name
GO

DECLARE @localVar VARCHAR(MAX) = 'data'
DECLARE @localVar VARCHAR(MAX) = 'data'
DECLARE @localVar VARCHAR(MAX) = 'data'
DECLARE @localVar int = 1
--Etc...

DECLARE @localVar INT
DECLARE @localVarVARCHAR(50)    
DECLARE @localVar AS BINARY (16)    
---Etc...


CREATE TABLE #tmpImportData (GuideFirstName VARCHAR(MAX), GuideLastName VARCHAR(MAX), 
                             email VARCHAR(MAX), group_id_text VARCHAR(MAX), CandidateName VARCHAR(MAX), 
                             grade_text VARCHAR(5), dateofbirth DATETIME

                             )

SET @sql = 'BULK INSERT #tmpImportData FROM '''+@fileName+''' WITH (FIELDTERMINATOR ='';'', ROWTERMINATOR = ''\n'', FIRSTROW = 1)'
EXEC (@sql)

--John O. How many rows from the import
SELECT @countCandidateImport = count(*) FROM #tmpImportData

--Fix some import data before any proccessing. We need to remove any punctuation, extra spaces, etc.
UPDATE #tmpImportData SET CandidateName = LTRIM(RTRIM(CandidateName)) FROM #tmpImportData
UPDATE #tmpImportData SET CandidateName = Replace(CandidateName,'.', '') FROM #tmpImportData
--UPDATE #tmpImportData SET CandidateName = Replace(CandidateName,',', '') FROM #tmpImportData

--Check DB for current district. If not exists create new one
SELECT @districtId = id, @ditrict_admins_restricted = CountAdminPermited, @candidates_restricted = count_candidate_restricted
FROM DistrictsTable WHERE name = RTRIM(LTRIM(@districtName))


--John O. What is whytry?
IF @districtId IS NULL
BEGIN
    INSERT INTO districtstable (name, active, CountAdminPermited, why_try_permitted) VALUES (RTRIM(LTRIM(@districtName)), 1, 3, @iswhyTry)
    SELECT @districtId = SCOPE_IDENTITY()
END
ELSE BEGIN
    SELECT @count_created_district_admins = count(*) 
    FROM GuidesTable gt
    INNER JOIN guides_to_permission gtp ON gtp.guide_id = gt.ID
    WHERE gt.DistrictID = @districtId AND gtp.permission_id = 0 AND gt.Active = 1

    IF(@count_created_district_admins >= @ditrict_admins_restricted)
    BEGIN
        SET @messageID = 1
    END

    SELECT @count_created_candidates = count(*)
    FROM CandidatesTable ct
    WHERE ct.DistrictID =  @districtId AND ct.Active = 1
    IF @count_created_candidates + @countCandidateImport >= @candidates_restricted
    BEGIN
        SET @messageID = 2  
    END

    IF(@messageID <> -1)
        RETURN
END
select 1
--Create School
DECLARE @schoolId AS INT
SET @schoolId = NULL
SELECT @schoolId = SchoolsTable.ID FROM SchoolsTable WHERE SchoolsTable.Name = LTRIM(RTRIM(@schoolName))
IF @schoolId IS NULL
    BEGIN
        INSERT INTO schoolstable (districtid, name, Active) VALUES (@districtId, @schoolName, 1)
        SELECT @schoolId = SCOPE_IDENTITY()
    END
ELSE 

SET @adminGuideId = NULL
SELECT @adminGuideId = GuidesTable.ID FROM GuidesTable WHERE LTRIM(RTRIM(FirstName)) = LTRIM(RTRIM(@FirstName)) 
    AND LTRIM(RTRIM(LastName)) = LTRIM(RTRIM(@LastName)) AND LTRIM(RTRIM(EmailAddress)) = LTRIM(RTRIM(@adminLogin))
select @adminGuideId
IF @adminGuideId IS NULL 
BEGIN
        SET @password = HASHBYTES('MD5', @passwordAdmin)                

        INSERT INTO GuidesTable (DistrictID, ClassID, FirstName         , LastName          , EmailAddress, [Password], createddate, Administrator, Active, website_access_level_id)
        VALUES                  (@districtId, 0     , @FirstName        , @LastName         , @adminLogin , @password , GetDate()  , 1            , 1     , 1)
        SET @tmpGuideId = SCOPE_IDENTITY()
        INSERT INTO guides_to_permission (guides_to_permission.guide_id ,guides_to_permission.permission_id) 
        VALUES                           (@tmpGuideId                   ,0                 )
        INSERT INTO guides_to_school_access (guides_to_school_access.guide_id , guides_to_school_access.school_id) 
        VALUES                              (@tmpGuideId                      , @schoolId                        )
END
ELSE BEGIN
        SELECT @AccessToSchoolId = gtsa.id FROM guides_to_school_access gtsa WHERE @adminGuideId = gtsa.guide_id AND @schoolId = gtsa.school_id
        IF @AccessToSchoolId IS NULL
        BEGIN
            INSERT INTO guides_to_school_access (guides_to_school_access.guide_id , guides_to_school_access.school_id) 
            VALUES                              (@adminGuideId                    , @schoolId                        )
        END
END
GO
--Create unique guides
--declare @SQL1 nvarchar(max)
--set @SQL1 = '
ALTER TABLE #tmpImportData ADD group_id INT
ALTER TABLE #tmpImportData ADD guide_id INT
ALTER TABLE #tmpImportData ADD password_plain_text VARCHAR(500)
ALTER TABLE #tmpImportData ADD guide_email VARCHAR(500)
ALTER TABLE #tmpImportData ADD class_id INT 

--exec sp_executesql @SQL1      
GO

UPDATE #tmpImportData SET group_id = CAST(group_id_text AS INT)
UPDATE #tmpImportData SET group_id = 0 WHERE group_id IS NULL

SELECT * FROM #tmpImportData
GO