我正在尝试编写此查询以查找具有特定列的所有表,并具有某些特定值.这就是我到目前为止所做的 -
EXEC sp_MSforeachtable
@command1='
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=PARSENAME("?",2) AND TABLE_NAME=PARSENAME("?",1) AND COLUMN_NAME="EMP_CODE")
BEGIN
IF (SELECT COUNT(*) FROM ? WHERE EMP_CODE="HO081")>0
BEGIN
SELECT * FROM ? WHERE EMP_CODE="HO081"
END
END
'
Run Code Online (Sandbox Code Playgroud)
我希望我的意图很明确,我只想选择列所在的那些表,EMP_CODE在那些表中我想选择那些行EMP_CODE='HO081'.
编辑 -
现在它就像这样.但是我无法@EMPCODE在查询中替换变量.
DECLARE @EMPCODE AS VARCHAR(20)
SET @EMPCODE='HO081'
EXEC sp_MSforeachtable
@command1='
DECLARE @COUNT AS INT
SELECT @COUNT=COUNT(*) FROM ? WHERE EMP_CODE='''+@EMPCODE+'''
IF @COUNT>0
BEGIN
PRINT PARSENAME("?",1)+'' => ''+CONVERT(VARCHAR,@COUNT)+'' ROW(S)''
--PRINT ''DELETE FROM ''+PARSENAME("?",1)+'' WHERE EMP_CODE='''''+@EMPCODE+'''''''
END
',@whereand='AND …Run Code Online (Sandbox Code Playgroud) sql-server stored-procedures sql-server-2005 sql-server-2008 sp-msforeachtable
我正在尝试从我的SQL库中的许多表中删除数据.
在数据库中,我有一个名为company的表,其中包含我需要从中删除数据的每个表的名称.
假设我的公司表中有3家公司.
我想要做的是删除每个公司的某些表中的所有记录.
所以,在公司表中我有以下3条记录:
1 2 3
Run Code Online (Sandbox Code Playgroud)
数据库中还有以下表格,用于描述每个公司的扫描文档.
dbo.1.documents
dbo.2.documents
dbo.3.documents
Run Code Online (Sandbox Code Playgroud)
我要做的是创建一个将通过dbo.company表运行的SQL查询,并根据在那里找到的公司名称清除文档表.
这是我的代码:
DECLARE @MyCursor CURSOR;
DECLARE @MyField varchar;
BEGIN
SET @MyCursor = CURSOR FOR
select top 1000 [Name] from dbo.Company
OPEN @MyCursor
FETCH NEXT FROM @MyCursor
INTO @MyField
WHILE @@FETCH_STATUS = 0
BEGIN
delete * from 'dbo.'+@MyField+'$documents'
FETCH NEXT FROM @MyCursor
INTO @MyField
END;
CLOSE @MyCursor ;
DEALLOCATE @MyCursor;
END;
Run Code Online (Sandbox Code Playgroud)
我不确定语法应该如何,但我想它是这样的.
有人关心如何根据dbo.company.name中的记录动态删除数据?