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语句。如何按顺序运行每一个?_Sql_Sql Server_Tsql - Fatal编程技术网

表的每一行都有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 

因为你是新来的,所以提醒一下,如果你的问题得到了答案,那么把它标记为接受是很重要的。