我正在使用Microsoft SQL Server
。我的数据库中有一个表。第一行是数字顺序的Item #
,第二列是我需要运行的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 ;
答案 0 :(得分:2)
您可以使用光标和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
的另一个问题是你也可以传递参数。我注意到你的陈述非常重复 - 你可以有一个包含查询的表和一个带参数的表。如果这是一个长期解决方案,那可能是一个好主意。
答案 1 :(得分:1)
我讨厌CURSORS
,所以我会建议你构建一个动态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
答案 2 :(得分:1)
最简单的方法是
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