相关疑难解决方法(0)

SQL Server sp_msforeachtable用法仅选择满足某些条件的表

我正在尝试编写此查询以查找具有特定列的所有表,并具有某些特定值.这就是我到目前为止所做的 -

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

17
推荐指数
2
解决办法
6万
查看次数

SQL Query从表中定义的表中删除数据

我正在尝试从我的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中的记录动态删除数据?

sql t-sql sql-server microsoft-dynamics dynamics-nav-2009

1
推荐指数
1
解决办法
618
查看次数