GVKun编程网logo

sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?

11

如果您想了解sql-server-2008–有没有办法可以使用SQLServer管理工作室查找列名包含某个子字符串的所有列?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于SQLServe

如果您想了解sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?的相关知识,那么本文是一篇不可错过的文章,我们将为您提供关于SQL Server 2008中的所有列名称如何使用ISNULL?、SQL Server 2008查询以查找列中包含非字母数字字符的行、sql server 2008管理工作室没有检查我的查询的语法、SQL SERVER 数据库查询包含某个字符串的所有物理表的有价值的信息。

本文目录一览:

sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?

sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?

我正在使用sql Server management studio 2008.

我有一个包含数千列的巨大遗留数据库.如果我可以搜索名称中包含某个子字符串的所有列,那就太好了.

有谁知道如何做到这一点?

谢谢!

解决方法

嗯,你可以试试:
use <your_database>
select o.name,c.name 
from sys.columns c inner join sys.objects  o on c.object_id=o.object_id 
and o.type = 'U'
and CHARINDEX('<your_sub_string>',c.name)>=1

SQL Server 2008中的所有列名称如何使用ISNULL?

SQL Server 2008中的所有列名称如何使用ISNULL?

我有个问题

我试图google,但看起来像他们不喜欢*

我正在使用sql Server 2008.

我有以下数据库表:

P_Id   ProductName UnitPrice   UnitsInStock    UnitsOnorder
------------------------------------------------------------------------
   1    Jarlsberg   10.45                 16    15
   2    Mascarpone  Null                  23    NULL 
   3    Gorgonzola  15.67                  9    20

如果我需要用字符串替换null我知道我做:

SELECT ISNULL(UnitsOnorder,'No Data') FROM tbl

问题

>如何用多列名称使用ISNULL()?
>是否可以使用*

喜欢

SELECT ISNULL(*,'NO data') FROM tbl

我认为这将是棘手的,因为数据类型,你不能传递字符串到INT数据类型,所以我怎么可以修复这个

更新

好的,如果我使用的数据类型为int的ISNULL()将返回0
这对我来说是一个价值,我该如何传递空字符串呢?

解决方法

您可以在不同列的同一sql语句中多次使用ISNULL,但必须为每列分别写入:
SELECT
    ISNULL(ProductName,'No Data') AS ProductName,ISNULL(CAST(UnitPrice AS NVARCHAR),'No Data') AS UnitPrice,ISNULL(CAST(UnitsInStock AS NVARCHAR),'No Data') AS UnitsInStock,ISNULL(CAST(UnitsOnorder AS NVARCHAR),'No Data') AS UnitsOnorder
FROM tbl

如果您正在构建动态SQL查询,则理论上可以收集表中的列列表,并在每个列上生成具有ISNULL的查询.例如:

DECLARE @sql nvarchar(max)

SET @sql = 'SELECT '

SELECT @sql = @sql + 'ISNULL(CAST([' + sc.name + '] AS NVARCHAR),''No Data'') AS [' + sc.name + '],'
FROM sys.objects so
INNER JOIN sys.columns sc ON sc.object_id = so.object_id
WHERE so.name = 'tbl'

-- Remove the trailing comma
SELECT @sql = LEFT(@sql,LEN(@sql) - 1) + ' FROM tbl'

EXEC sp_sqlexec @sql

将某些列类型(如时间戳)转换为nvarchar时,此代码有问题,但它说明了该技术.

请注意,如果您有另一列应该返回值,如果值为null,则可以使用COALESCE表达式,如下所示:

SELECT COALESCE(ProductName,P_Id) AS Product...

SQL Server 2008查询以查找列中包含非字母数字字符的行

SQL Server 2008查询以查找列中包含非字母数字字符的行

实际上,几周前有人问我自己,而我确切地知道如何使用SP或UDF来执行此操作,但是我想知道是否有没有这些方法的快速简便的方法。我假设有,但我找不到。

我需要说明的一点是,尽管我们知道允许使用哪些字符(az,AZ,0-9),但我们 不想指定 不允许使用的字符(#@!$等…)。另外,我们希望拉出
包含 非法字符的行,以便可以将其列出给用户修复(由于我们无法控制输入过程,因此此时无法执行任何操作)。

之前,我已经浏览过SO和Google,但找不到能满足我要求的内容。我已经看到了许多示例,这些示例可以告诉您它是否包含字母数字字符,但是可以在查询形式中找不到的句子中加上撇号。

另请注意,此列中的值可以是null''''(空)varchar

答案1

这不是吗?

SELECT * FROM TABLEWHERE COLUMN_NAME LIKE ''%[^a-zA-Z0-9]%''

设置

use tempdbcreate table mytable ( mycol varchar(40) NULL)insert into mytable VALUES (''abcd'')insert into mytable VALUES (''ABCD'')insert into mytable VALUES (''1234'')insert into mytable VALUES (''efg%^&hji'')insert into mytable VALUES (NULL)insert into mytable VALUES ('''')insert into mytable VALUES (''apostrophe '''' in a sentence'')SELECT * FROM mytableWHERE mycol LIKE ''%[^a-zA-Z0-9]%''drop table mytable

结果

mycol----------------------------------------efg%^&hjiapostrophe '' in a sentence

sql server 2008管理工作室没有检查我的查询的语法

sql server 2008管理工作室没有检查我的查询的语法

一如以往,会有一个合理的解释我的惊喜,但直到那时….

我有这个查询

delete from Photo  where hs_id  in (select hs_id  from Hotelsupplier where id = 142)

它执行得很好(后来我发现整个照片表都是空的)

但奇怪的是:在Hotelsupplier中没有字段hs_id,它被称为hs_key!

所以当我执行最后一部分

select hs_id  from Hotelsupplier where id = 142

单独(使用鼠标选择该部分查询并按F5),我收到一个错误,但是当我在in子句中使用它时,它不会!

我不知道这是否是正常行为?

解决方法

它从外部查询获取hs_id的值.

不合格的列引用从最接近的范围向外解析,因此这仅仅被视为相关的子查询.

此查询的结果将是从Photos中删除所有行,其中hs_id不为null,只要Hotelsupplier至少有一行id = 142(因此子查询返回至少一行)

如果你考虑这是什么影响,可能会更清楚一些

delete from Photo  where Photo.hs_id  in (select Photo.hs_id)

这当然等同于

delete from Photo where Photo.hs_id = Photo.hs_id

顺便说一句,这是我最亲眼看到的最常见的“错误”,我个人认为微软在Microsoft Connect上报错了. Erland Sommarskog在他的wishlist中包含了SET STRICT_CHECKS ON

SQL SERVER 数据库查询包含某个字符串的所有物理表

SQL SERVER 数据库查询包含某个字符串的所有物理表


create PROCEDURE [dbo].[SP_FindValueInDB]
(
@value VARCHAR(1024)
)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @sql VARCHAR(1024)
DECLARE @table VARCHAR(64)
DECLARE @column VARCHAR(64)

CREATE TABLE #t (
tablename VARCHAR(64),
columnname VARCHAR(64)
)

DECLARE TABLES CURSOR
FOR

SELECT o.name, c.name
FROM syscolumns c
INNER JOIN sysobjects o ON c.id = o.id
WHERE o.type = ''U'' AND c.xtype IN (167, 175, 231, 239)
ORDER BY o.name, c.name

OPEN TABLES

FETCH NEXT FROM TABLES
INTO @table, @column

WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = ''IF EXISTS(SELECT NULL FROM ['' + @table + ''] ''
SET @sql = @sql + ''WHERE RTRIM(LTRIM(['' + @column + ''])) LIKE ''''%'' + @value + ''%'''') ''
SET @sql = @sql + ''INSERT INTO #t VALUES ('''''' + @table + '''''', ''''''
SET @sql = @sql + @column + '''''')''

EXEC(@sql)

FETCH NEXT FROM TABLES
INTO @table, @column
END

CLOSE TABLES
DEALLOCATE TABLES

SELECT *
FROM #t

DROP TABLE #t
End

今天的关于sql-server-2008 – 有没有办法可以使用SQL Server管理工作室查找列名包含某个子字符串的所有列?的分享已经结束,谢谢您的关注,如果想了解更多关于SQL Server 2008中的所有列名称如何使用ISNULL?、SQL Server 2008查询以查找列中包含非字母数字字符的行、sql server 2008管理工作室没有检查我的查询的语法、SQL SERVER 数据库查询包含某个字符串的所有物理表的相关知识,请在本站进行查询。

本文标签: