Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 无效的对象名称';表2和表x27;_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 无效的对象名称';表2和表x27;

Sql 无效的对象名称';表2和表x27;,sql,sql-server,tsql,Sql,Sql Server,Tsql,在多模式数据库中使用此脚本时,我尝试替换sql中的两个字符 我收到了这个错误: Msg 208,16级,状态1,第1行无效对象名称 “PayPersonAccounts”。Msg 208,16级,状态1,第1行无效对象 名称为“PayPersonAccounts”。Msg 208,16级,状态1,第1行无效 对象名称“CMRDirectDeliveryPartHeader” 您需要在架构中使用完整的表名。为了确定,请附上表格名称。也可将sys.tables用于以下表格: 系统表 QUOTENAM

在多模式数据库中使用此脚本时,我尝试替换sql中的两个字符 我收到了这个错误:


Msg 208,16级,状态1,第1行无效对象名称
“PayPersonAccounts”。Msg 208,16级,状态1,第1行无效对象
名称为“PayPersonAccounts”。Msg 208,16级,状态1,第1行无效 对象名称“CMRDirectDeliveryPartHeader”


您需要在架构中使用完整的表名。为了确定,请附上表格名称。也可将sys.tables用于以下表格: 系统表


QUOTENAME(SCHEMA_NAME(t.SCHEMA_id))+'.+QUOTENAME(t.NAME)

我想你的schemaname不见了。。正在尝试检查此已更改的查询

USE Test
DECLARE @SchemaName SYSNAME, @Table NVARCHAR(MAX),@Column NVARCHAR(MAX)
DECLARE Table_Cursor CURSOR
FOR

SELECT s.Name  --schemaname
    , T.name, /* Table */
      C.name  /* Column */
FROM sysobjects T inner join 
syscolumns C on
T.id = C.Id
inner join sys.schemas s
on T.uid = s.schema_id
where T.xtype = 'u' /* User Table */
                    AND (C.xtype = 99 /* ntext */
                    OR C.xtype = 35   /* text */
                    OR C.xtype = 231  /* nvarchar */
                    OR C.xtype = 167  /* varchar */
                    OR C.xtype = 175  /* char */
                    OR C.xtype = 239  /* nchar */)

OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @SchemaName, @Table, @Column
WHILE (@@FETCH_STATUS = 0)
BEGIN
    EXEC ('Update [' + @SchemaName + '].[' + @Table + '] Set [' + @Column + '] = REPLACE(REPLACE(CAST([' + @Column +  '] as nvarchar(max)), NCHAR(1610), NCHAR(1740)), NCHAR(1603), NCHAR(1705))')
FETCH NEXT FROM Table_Cursor INTO @SchemaName, @Table,@Column
END CLOSE Table_Cursor 
DEALLOCATE Table_Cursor

您可以检查模式名称吗?架构可能不同..最好使用schemaname.tablenameSmall备注:您将如何处理计算列?它们也在这里被选中。如果可以,请使用
QUOTENAME
CONCAT
。只是看起来整洁多了。谢谢你的帮助如何解决这个问题,以及这个脚本的哪一部分必须更改?旁白:向我的小朋友问好。表和列名是否来自绝对可靠的来源?正如Matias所建议的,您可以使用sys.tables或Information_Schema.tables,在其中您可以随时使用表_Schema。不要测试代码-尝试打印代码并检查它是否生成所需的更新脚本SMSG 208,级别16,状态1,第1行对象名称“Pay.PayPersonAccounts”无效。Msg 16924,级别16,状态1,第26行Cursorfetch:在INTO列表中声明的变量数量必须与所选列的数量匹配。我认为这是由于QuoteName造成的问题。我现在改了。您能检查一下吗?再次感谢Msg 16924,级别16,状态1,第27行Cursorfetch:在INTO列表中声明的变量数量必须与所选列的数量匹配。
USE Test
DECLARE @SchemaName SYSNAME, @Table NVARCHAR(MAX),@Column NVARCHAR(MAX)
DECLARE Table_Cursor CURSOR
FOR

SELECT s.Name  --schemaname
    , T.name, /* Table */
      C.name  /* Column */
FROM sysobjects T inner join 
syscolumns C on
T.id = C.Id
inner join sys.schemas s
on T.uid = s.schema_id
where T.xtype = 'u' /* User Table */
                    AND (C.xtype = 99 /* ntext */
                    OR C.xtype = 35   /* text */
                    OR C.xtype = 231  /* nvarchar */
                    OR C.xtype = 167  /* varchar */
                    OR C.xtype = 175  /* char */
                    OR C.xtype = 239  /* nchar */)

OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @SchemaName, @Table, @Column
WHILE (@@FETCH_STATUS = 0)
BEGIN
    EXEC ('Update [' + @SchemaName + '].[' + @Table + '] Set [' + @Column + '] = REPLACE(REPLACE(CAST([' + @Column +  '] as nvarchar(max)), NCHAR(1610), NCHAR(1740)), NCHAR(1603), NCHAR(1705))')
FETCH NEXT FROM Table_Cursor INTO @SchemaName, @Table,@Column
END CLOSE Table_Cursor 
DEALLOCATE Table_Cursor