表的每一行都有sql语句。如何按顺序运行每一个?
我正在使用表的每一行都有sql语句。如何按顺序运行每一个?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在使用Microsoft SQL Server。我的数据库中有一个表。第一行是以数字顺序排列的项35;,第二列是我需要运行的T-SQL的精确行 如何编写调用每一行以项目编号顺序运行的内容 Item # Code ------ ---- 1 UPDATE GOC_AU_INTERSECTION SET GOC_AU_INTERSECTION.DSMT_BUSINESS = 'BUSA', GOC_AU_INTERSE
Microsoft SQL Server
。我的数据库中有一个表。第一行是以数字顺序排列的项35;
,第二列是我需要运行的T-SQL
的精确行
如何编写调用每一行以项目编号顺序运行的内容
Item # Code
------ ----
1 UPDATE GOC_AU_INTERSECTION SET GOC_AU_INTERSECTION.DSMT_BUSINESS = 'BUSA',
GOC_AU_INTERSECTION.RULE_CODE = '101' FROM DSMT_GOC_FLAT, GOC_AU_INTERSECTION
WHERE GOC_AU_INTERSECTION.RULE_CODE Is Null AND DSMT_GOC_FLAT.MS_Level_10='14197'
AND DSMT_GOC_FLAT.GOC = GOC_AU_INTERSECTION.GOC;
2 UPDATE GOC_AU_INTERSECTION SET GOC_AU_INTERSECTION.DSMT_BUSINESS = 'BUSA',
GOC_AU_INTERSECTION.RULE_CODE = '102' FROM DSMT_GOC_FLAT, GOC_AU_INTERSECTION
WHERE GOC_AU_INTERSECTION.RULE_CODE Is Null AND DSMT_GOC_FLAT.MS_Level_10='14198'
AND DSMT_GOC_FLAT.GOC = GOC_AU_INTERSECTION.GOC;
3 UPDATE GOC_AU_INTERSECTION SET GOC_AU_INTERSECTION.DSMT_BUSINESS = 'BUSA',
GOC_AU_INTERSECTION.RULE_CODE = '103' FROM DSMT_GOC_FLAT, GOC_AU_INTERSECTION
WHERE GOC_AU_INTERSECTION.RULE_CODE Is Null AND DSMT_GOC_FLAT.MS_Level_10='14202'
AND DSMT_GOC_FLAT.GOC = GOC_AU_INTERSECTION.GOC ;
项目#代码
------ ----
1更新GOC_AU_交叉点集GOC_AU_交叉点。DSMT_业务='BUSA',
GOC_AU_交叉口。规则代码='101'来自DSMT_GOC_平面,GOC_AU_交叉口
其中GOC_AU_INTERSECTION.RULE_CODE为空,DSMT_GOC_FLAT.MS_Level_10='14197'
DSMT_GOC_FLAT.GOC=GOC_AU_crossion.GOC;
2更新GOC_AU_交叉点集GOC_AU_交叉点。DSMT_业务='BUSA',
GOC_AU_交叉口。规则代码='102'来自DSMT_GOC_平面,GOC_AU_交叉口
其中GOC_AU_INTERSECTION.RULE_CODE为空,DSMT_GOC_FLAT.MS_Level_10='14198'
DSMT_GOC_FLAT.GOC=GOC_AU_crossion.GOC;
3更新GOC_AU_交叉点集GOC_AU_交叉点。DSMT_业务='BUSA',
GOC_AU_交叉口。规则代码='103'来自DSMT_GOC_公寓,GOC_AU_交叉口
其中GOC_AU_crossion.RULE_CODE为空,DSMT_GOC_FLAT.MS_Level_10='14202'
DSMT_GOC_FLAT.GOC=GOC_AU_crossion.GOC;
您可以使用光标和
sp_executesql
DECLARE @sqlStmt VARCHAR(4000);
DECLARE exCursor CURSOR FOR
SELECT Column2 FROM table ORDER BY Column1;
OPEN exCursor;
FETCH NEXT FROM exCursor INTO @sqlStmt;
WHILE @@FETCH_STATUS = 0
BEGIN
EXECUTE sp_executesql @sqlStmt;
FETCH NEXT FROM exCursor INTO @sqlStmt;
END
CLOSE exCursor;
DEALLOCATE exCursor;
将创建游标以从语句表中查询并检索sql语句,按column1排序。然后获取每个语句并执行它
了解更多信息
sp_executesql
的另一个特点是,您也可以将参数传递给它。我注意到您的陈述非常重复-您可以有一个带有查询的表和一个带有参数的表。如果这是一个长期的解决方案,这可能是一个好主意。我讨厌游标,所以我建议您构建一个动态SQL语句,然后执行它。
这是一个完整的工作示例:
SET NOCOUNT ON
GO
DECLARE @Statement TABLE
(
[Item #] TINYINT IDENTITY(1,1)
,[Code] NVARCHAR(32)
)
INSERT INTO @Statement ([Code])
VALUES ('SELECT 1')
,('SELECT 2')
,('SELECT 3')
DECLARE @DynamicSQLStatement NVARCHAR(MAX)
SET @DynamicSQLStatement =
(
SELECT CHAR(10) + CHAR(13) + [Code] + CHAR(10) + CHAR(13)
FROM @Statement
ORDER BY [Item #]
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
--SELECT @DynamicSQLStatement
EXEC sp_executesql @DynamicSQLStatement
SET NOCOUNT OFF
GO
最简单的方法是
declare @sql nvarchar(max)=''
select @sql+= Code+' ' from tablename order by Item#
exec sp_executesql @sql
@DanielGimenez+=是有效的TSQL运算符。检查这个
DECLARE @string varchar(10) = 'abc'
SET @string += 'def'
print @string
因为你是新来的,所以提醒一下,如果你的问题得到了答案,那么把它标记为接受是很重要的。