我的存储过程工作正常。我的问题是我重复动态查询3次使用它: -
--For Note
SET @TblMaterial = 'ClassNote'
SET @ColMaterialID = 'ClassNoteID'
SET @ColMaterialFK = 'ClassNoteFK'
SET @cmdForMaterial = N'UPDATE '+@TblMaterial+' Set Status_Info = 0 where '+@ColMaterialID+' in ( Select s.'+@ColMaterialFK+' from '+@RelTbl+' s where s.' + @ColForFK + ' = ' + @MainID + ' AND s.ClassSubjectFK IN ( SELECT T.ClassSubjectFK FROM ' + @RelTbl + ' T WHERE T.'+@ColForFK+' = '+ @MainID + ') and s.ClassSubjectFK NOT IN ( SELECT E.ClassSubjectFK FROM ' +@RelTbl+' E WHERE E.'+@ColForFK+' != '+ @MainID +') and s.'+@ColMaterialFK+' is not null )'
EXEC(@cmdForMaterial)
--For EBook
SET @TblMaterial = 'ClassEbook'
SET @ColMaterialID = 'ClassEbookID'
SET @ColMaterialFK = 'ClassEbookFK'
SET @cmdForMaterial = N'UPDATE '+@TblMaterial+' Set Status_Info = 0 where '+@ColMaterialID+' in ( Select s.'+@ColMaterialFK+' from '+@RelTbl+' s where s.' + @ColForFK + ' = ' + @MainID + ' AND s.ClassSubjectFK IN ( SELECT T.ClassSubjectFK FROM ' + @RelTbl + ' T WHERE T.'+@ColForFK+' = '+ @MainID + ') and s.ClassSubjectFK NOT IN ( SELECT E.ClassSubjectFK FROM ' +@RelTbl+' E WHERE E.'+@ColForFK+' != '+ @MainID +') and s.'+@ColMaterialFK+' is not null )'
EXEC(@cmdForMaterial)
--For SP
SET @TblMaterial = 'ClassSamplePaper'
SET @ColMaterialID = 'ClassSamplePaperID'
SET @ColMaterialFK = 'ClassSPFK'
SET @cmdForMaterial = N'UPDATE '+@TblMaterial+' Set Status_Info = 0 where '+@ColMaterialID+' in ( Select s.'+@ColMaterialFK+' from '+@RelTbl+' s where s.' + @ColForFK + ' = ' + @MainID + ' AND s.ClassSubjectFK IN ( SELECT T.ClassSubjectFK FROM ' + @RelTbl + ' T WHERE T.'+@ColForFK+' = '+ @MainID + ') and s.ClassSubjectFK NOT IN ( SELECT E.ClassSubjectFK FROM ' +@RelTbl+' E WHERE E.'+@ColForFK+' != '+ @MainID +') and s.'+@ColMaterialFK+' is not null )'
EXEC(@cmdForMaterial)
我只是想知道是否有任何出路以便我可以设置此代码: -
SET @cmdForMaterial = N'UPDATE '+@TblMaterial+' Set Status_Info = 0 where '+@ColMaterialID+' in ( Select s.'+@ColMaterialFK+' from '+@RelTbl+' s where s.' + @ColForFK + ' = ' + @MainID + ' AND s.ClassSubjectFK IN ( SELECT T.ClassSubjectFK FROM ' + @RelTbl + ' T WHERE T.'+@ColForFK+' = '+ @MainID + ') and s.ClassSubjectFK NOT IN ( SELECT E.ClassSubjectFK FROM ' +@RelTbl+' E WHERE E.'+@ColForFK+' != '+ @MainID +') and s.'+@ColMaterialFK+' is not null )'
一次并多次使用它?
答案 0 :(得分:0)
避免使用动态查询,您可以编写更易于管理的简单更新语句。
如果在这种情况下无法将其更改为正常更新查询,则可以继续 对于具有所需参数的存储过程,并使用不同的参数多次调用它。
不推荐: 如果你不能选择上述任何一个选项,你可以尝试以下。
CREATE TABLE #T(
[Index] INT Identity ,ColMaterialID VARCHAR(100)
, ColMaterialFK VARCHAR(100),TblMaterial VARCHAR(100)
)
INSERT INTO #T(ColMaterialID,ColMaterialFK,TblMaterial)
SELECT 'ClassNote','ClassNoteID','ClassNoteFK'
--Insert Remaning values
WHILE(SELECT COUNT(*) FROM #T) > 0
BEGIN
--Read the top 1 from temp table
--Build the Query and Execute
--Remove the processed entiry
END